首页 > 代码库 > 应注意的Flex&Bison潜规则
应注意的Flex&Bison潜规则
1.Flex的二义性模式
- 语法分析器匹配输入时匹配尽可能多的字符串
- 如果两个模式都可以匹配的话,匹配在程序中更早出的模式。
针对这一点的理解,在语法分析文件当中,token的识别,应从特殊到一般的过程来编写(同时为了可以加入日志来打印当前拆分的token来debug这种情况),例如,实现语法分析过程中,遇到词法拆分column is not null,应将null的词法写到标识符识别的前台,否则会发生将null先拆分成了identifer而非null终节符。NULL {
malloc_node(yylval->node, ((ParseResult*)yyextra)->memoryPool, T_NULL, 0);
return NULLX;
}{identifer} {
int ret = NAME;
ASTNode* node = NULL;
malloc_node(node, ((ParseResult*)yyextra)->memoryPool, T_NAME,0);
....
}
2. 语法分析文件当中%token 定义的终结符和%type 定义的非终结符,不需要手动通过enum来进行声明,在bison工具会自动根据语法分析文件中定义情况,自动生成相应的YYTOKENTYPE 定义。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。