2015-07-21 43 views
1

使用YACC,我想分析的文字像规则具有相同的字符串标记两次

begin foo ... end foo 

字符串foo在编译时已知有可以在相同的输入不同 这样的字符串。

到目前为止,我看到的唯一选择是解析后检查没有语法错误:

block : BEGIN IDENT something END IDENT 
     { if (strcmp($2, $5) != 0) yyerror("Mismatch"); } 

这种感觉是错误的。解析器应该已经检测到错误。 yacc有内置的东西吗?

回答

2

yacc只知道词法分析器可以识别的标记。由于这些是相同的,词法分析器只能通过使用状态来改善这种情况。

也就是说,您可以告诉lex记住它看到了一个BEGIN并计数令牌本身,并返回不同类型的IDENT(并在那里执行检查)。

然而,yacc更适合这种事情,所以对原始问题的答案是“否”,没有更好的解决方案。

相关问题