error: expected identifier or ‘(’ before ‘=’ token

直译错误:在'='这个记号之前期待着有标识符或者'('

言外之意就是'='之前的那个符号不是标识符!也就是说可能被你错误定义成了修饰符、关键字这类的东西!

ps:为啥说or '( '。我是真的不晓得?

错误缘由:在Linux环境学习bison的基础知识。实现扫描一系列简单的等式,打印输出相关的信息。在从windows环境把写好的.l文件和.y文件传送过来到Linux环境之后,编译过程出现了错误!

错误再现:

gcc编译之时,出现报错:

分析原因:定位到Name.l文件的第12行和第14行,显示yylval不是一个标识符?why?我们知道flex和bison交互协作进行词法/语法分析的过程是这样的:flex的词法分析器yylex()在扫描文本的过程中,根据设定好的规则,返回相应的记号(token)类型给bison的语法分析器yyparse(),而相应的记号值则存储给yylval这个变量中返回给parser()这一境界进行调用!yylval的数据类型是YYSTYPE类型的,YYSTYPE是一种宏定义类型,一般而言默认为int,不如我们如果想让yylval返回的类型是字符串char *),则可以在.l文件中声明"'#define YYSTYPE char*"(#define 目的类型 源类型),而在.y文件中也声明'#define YYSTYPE char*"。

打开Name.l文件,果然:

yylval本该是一种变量,却声明称了固定的类型,怎么不会报错!本来人家需要一个名词,你却反手扔了一个形容词过来,怎么不会报错呀!!!!!!

引以为戒!

改正:将"#define yylval char*"改正为"#define YYSTYPE char*",解决运行!

不过还有个疑问,为啥报错提示说期待有个'(',这种情况对应的具体场景又是什么呀?

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值