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
$ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值