|
1
4
通常,在需要它的源文件之间共享外部声明的头文件是最好的方式。主要的选择是提供对它的“功能访问”——也就是说,某种类型的“get value”和“set value”函数(或一组函数)。这通常是杀伤力过大。确保在语法(定义变量的地方)以及lexer和其他代码中包含头部,以便尽快发现不一致。 |
|
|
2
2
如果您想坚持使用标准(posix)lex/yacc,那么您唯一的选择就是使用全局变量/函数。如果您可以使用bison和flex扩展,那么有几种方法可以传递变量,这些方法主要包括向yyparse()和yylex()添加额外的参数。 在Bison中,这是通过%lex param和%parse param完成的。
在flex中,有两种不同的机制,这取决于您是否需要一个可重入的lexer。假设您使用默认(不可重入)选项,您将需要重新定义YY U decl:
在可重入的flex-lexer中,可以通过flex携带的scanner结构添加额外的参数以保持其状态。您需要定义YY_Extra_类型;可以通过YYGET/SET_Extra()访问额外数据。 |
|
|
lluisrojass · 为什么Yacc/野牛规则没有用? 9 年前 |
|
|
neomang · 解决yacc冲突-由于冲突,解析器中的规则无效 10 年前 |
|
|
Zhang Kai Yu · yacc:%{}在yacc中是什么意思? 11 年前 |
|
|
gornvix · 分析多个文件时出现错误的lex状态 11 年前 |
|
|
Shehzaad · 为什么它显示我的函数在返回char*时返回int? 12 年前 |
|
|
Nikon the Third · 如何解析连续的文本流 13 年前 |
|
|
TreeTree · lex和yacc的运行时“语法错误” 13 年前 |