Antlr:lookahead和lookbehind示例
问题描述:
我很难搞清楚如何识别某些文本,前提是后面跟着某些东西。任务是认识AND,OR,和NOT,但如果他们是一个字的一部分:Antlr:lookahead和lookbehind示例
他们应该在这里确认:
x AND y
(x)AND(y)
NOT x
NOT(x)
但不是在这里:
xANDy
abcNOTdef
如果它被空格或括号包围,则会被识别。如果它位于输入的开始处,前面是空格,后面跟着空格或括号,则不会被识别。
麻烦的是,如果我将括号作为AND或NOT定义的一部分,它们会被消耗掉,我需要它们成为单独的标记。
是否有某种可以使用的lookahead/lookbehind语法?
编辑:
%的意见,这里的一些背景。问题与此问题有关:Antlr: how to match everything between the other recognized tokens?我的工作解决方案只是识别AND,OR等,并跳过其他所有内容。然后,在文本的第二遍中,我手动抓取未覆盖的字符,并在其上运行完全不同的标记器。原因是我需要一个定制的,特定于人类语言的标记器来表示这个内容,这意味着我不能提前描述什么是ID。每种人的语言都不一样。我想分阶段地合并一个查询语言标记器,然后将人类语言标记器应用到剩下的部分。
那么'xANDy'和'abcNOTdef'应该如何标记?这些通常被标记为某种标识符标记,在这种情况下,您应该没有问题。关于你想要解析/标记的内容的更多上下文将会非常有帮助。 –
巴特的权利。你没有看到问题。为'AND'和'ID'创建一个规则,其中'ID'匹配您的标识符。在语法中的'ID'规则之前放置关键字规则('AND')。它会在'和'单独出现时匹配(例如,被空格或非空格包围)。否则'ID'匹配并给你任何标识符(甚至包含字母'和'的那些标识符)。 –
上下文添加到我的问题。 – ccleve