Antlr:lookahead和lookbehind示例

时间:2017-08-29 20:08:40

标签: parsing antlr4 lexer

我很难弄清楚如何识别某些文字,只有在某些文字之前和之后才能识别。任务是识别AND,OR和NOT,但不是,如果它们是单词的一部分:

他们应该在这里得到承认:

x AND y
(x)AND(y)
NOT x
NOT(x)

但不在这里:

xANDy
abcNOTdef

如果它被空格或括号包围,则会被识别。如果它位于输入的开头,前面有空格,后跟空格或括号,则不会被识别。

麻烦的是,如果我将括号作为AND或NOT定义的一部分,它们会被消耗,我需要将它们作为单独的标记。

我可以使用某种前瞻/后瞻语法吗?

修改

根据评论,这里有一些背景信息。问题与此问题有关:Antlr: how to match everything between the other recognized tokens?我的工作解决方案只是识别AND,OR等,并跳过其他所有问题。然后,在文本的第二次传递中,我手动抓取未覆盖的字符,并在其上运行完全不同的标记器。原因是我需要一个针对此内容的自定义,特定于人类语言的标记化器,这意味着我无法提前描述什么是ID。每种人类语言都不同。我想分阶段合并一个查询语言标记器,然后将一个人类语言标记器应用到左边。

1 个答案:

答案 0 :(得分:0)

ANTLR不适合执行此任务。普通解析器是针对特定语言设计的,即由解析器创建时已知的元素组成的一组句子。有办法使这更灵活,例如通过在谓词中使用运行时函数来识别语法中未定义的单词,但这具有其他(负面)含义。

对于处理自然语言的不同方法,您应该考虑NLP。它不仅仅是在两个已知令牌之间跳过东西。