词法分析器规则只能应用于一个解析器规则吗?

时间:2012-09-06 19:01:24

标签: parsing antlr lexical-analysis

我们对ANTLR的问题是我们有一个解析这样的语法:

Hello, my name is bob.
bob offset: 5

请记住“鲍勃”。在第一行是动态的,可能是任何东西。其中一件事是“鲍勃”。 “bob offset”行不是动态的,并且位于我们正在解析的每个类型的文件中。

所以,要解析这个问题,我们有几个规则:

greeting: 'Hello, my name is' id1=IDENT '.' NEWLINE
    { System.out.println("Name: " + $id1.text"); }
    ;

bob_offset: 'bob offset:' id1=5 NEWLINE
    { System.out.println("bob offset: " + $id1.text); }
    ;

所以,问题是'bob offset:'是词法分析器读取的标记。现在,当greeting规则发生时,会抛出错误,因为它试图将'bob'与'bob offset:'匹配,但它不能。

理想的解决方案是,如果ANTLR有某种方式来指定特定于上下文或解析器规则的词法分析器规则。这样,'bob offset:'标记在语法中的任何其他地方都不会被误认为。

对此问题的任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我们最终不得不使用更多的解析器规则解决这个问题,以便更加专门地为ANTLR充实它。