1

我们在使用 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:' 标记就不会在语法中的其他任何地方出错。

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

4

1 回答 1

0

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

于 2012-12-12T22:54:02.267 回答