yacc&lex-調用C++代碼

要點

用lex&yacc命令缺省生成的是C文件,但事實上,僅是文件擴展名錶示爲C文件。可以用g++或者直接改名爲C++就可以在lex&yacc中用C++功能。

代碼

%{

#include <string>
#include <iostream>

%}

%%

[\t ]+   /* white space */

[a-zA-Z]+ { 
        std::string word(yytext);
        std::cout<<"word: "<<word<<std::endl;
    }

[0-9]+ {
        std::string number(yytext);
        std::cout<<"number: "<<number<<std::endl;
    }

.|\n  {ECHO; /* normal default anyway */ }
%%

int main()
{
    std::cout<<"Lex and C++"<<std::endl;

    yylex();

    return 0;
}

運行

$ lex test.l 
$ gcc -o test lex.yy.c -ll
test.l:3:10: fatal error: 'string' file not found
#include <string>
         ^
1 error generated.
$ g++ -o test lex.yy.c -ll
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
$ ls
lex.yy.c    test        test.l
$ ./test 
Lex and C++
the price is 100 yuan.
word: the
word: price
word: is
number: 100
word: yuan
.
^C
$ cp lex.yy.c lex.yy.cpp
$ g++ -o test lex.yy.cpp -ll
$ ./test 
Lex and C++
the price is 100 yuan.
word: the
word: price
word: is
number: 100
word: yuan
.
^C
$ 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章