yacc&lex-调用C++代码

来源:互联网 发布:网络语言10086什么意思 编辑:程序博客网 时间:2024/06/01 18:00

要点

用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 -lltest.l:3:10: fatal error: 'string' file not found#include <string>         ^1 error generated.$ g++ -o test lex.yy.c -llclang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated$ lslex.yy.c    test        test.l$ ./test Lex and C++the price is 100 yuan.word: theword: priceword: isnumber: 100word: 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: theword: priceword: isnumber: 100word: yuan.^C$ 
0 0
原创粉丝点击