Parsing BISON语法分析中的基本问题
我是野牛队的新手,如果你能帮助我,我有一些基本问题:Parsing BISON语法分析中的基本问题,parsing,bison,Parsing,Bison,我是野牛队的新手,如果你能帮助我,我有一些基本问题: 以下哪一项是正确的: %left ’*’ ’/’ 或 这意味着我不用获取令牌,而是使用它在解析器文件中定义它 我可以这样定义一个规则吗: EXP -> EXP "and" EXP 而不是 EXP -> EXP AND EXP //AND here is a token 如果我有LEX和BISON文件来构建解析器,那么哪一个应该包含另一个,如果 我使用了一个公共头文件,其中一个文件应该在其中定义 如果BISON算法根据其中
%left ’*’ ’/’
或
这意味着我不用获取令牌,而是使用它在解析器文件中定义它EXP -> EXP "and" EXP
而不是
EXP -> EXP AND EXP //AND here is a token
%left
只定义了一个标记(与%token
完全相同),并为该标记设置了优先级。您仍然需要通过在lexer中识别令牌并返回适当的令牌值来“获取”令牌和“
”,但您不想这样做,因为几乎不可能做到正确。最好使用和
或和
(无引号)。不同之处在于,使用引号创建的标记不是作为.tab.h
文件中的#define
输出的,因此在lexer中生成该标记并不容易-d
标志生成的头——这是大多数示例所做的。也可以在.y
文件的第三部分直接包含lex.yy.c
文件,或者在.l
文件的顶部包含.tab.c
(但不能同时包含这两个!),在这种情况下,您将只编译一个文件$$
的值在第二点上,我有点不同意克里斯的观点。最好使用
”和“
”,因为在错误消息中,解析器将报告有关”和“
的信息,而不是关于TOK_和
或t_和
的信息,这对用户来说肯定没有意义
而且,要做到正确并不难:只要你
%token TOK_AND "and"
在某些地方,您可以在语法文件中使用
和“
或TOK_和
。但是,恕我直言,前者要清楚得多。现在可能更清楚了一点,我已经尝试过设置问题的格式,但我认为第一季度的问题是使用ASCII单引号U+0027撇号(”
)与Unicode(UTF-8)U+2019右单引号(”
)或U\U 2018左单引号(”
)。答案是,我相信Lex/Flex和Bison都希望使用撇号,而不是单引号。谢谢您的帮助,但是如果我使用另外两个文件.c和.h为.y文件中的操作定义外部函数,在.h文件中包含它们,函数的声明和实现在.c文件中呢
%token TOK_AND "and"