Antlr: lookahead and lookbehind examples



我很难弄清楚如何仅在先进之前识别某些文本并遵循某些内容。任务是识别和,或者,而不是,但不是一个单词的一部分:

应该在这里识别它们:

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

但不是这里:

xANDy
abcNOTdef

,如果它被空间或括号包围,并被识别。如果它在输入的开头,则没有被识别,然后是空间或括号。

问题是,如果我将括号作为定义的一部分,或者它们被消耗,我需要它们是单独的令牌。

我可以使用某种lookahead/lookbehind语法吗?

编辑:

根据评论,这里有一些上下文。该问题与此问题有关:ANTLR:如何匹配其他公认令牌之间的所有内容?我的工作解决方案只是为了识别和等等,然后跳过其他所有内容。然后,在文本上的第二次通过中,我手动抓住了没有覆盖的字符,并在上面运行完全不同的令牌。原因是我需要这个内容的自定义,人类特定的令牌机,这意味着我不能事先描述什么是ID。每种人类语言都是不同的。我想分阶段组合一个查询语言令牌,然后在剩下的东西上应用人类的令牌。

antlr不是适合此任务的正确工具。普通解析器是为特定语言设计的,即一组由解析器创建时间已知的元素组成的句子。有一些方法可以使它更加灵活,例如通过在谓词中使用运行时函数来识别语法中未定义的单词,但这具有其他(负)含义。

您应该考虑的是使用不同方法来处理自然语言的NLP。这不仅仅是跳过两个已知令牌之间的东西。

相关内容

  • 没有找到相关文章

最新更新