我们在使用 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:' 标记就不会在语法中的其他任何地方出错。
对此问题的任何想法将不胜感激。