如何在ANTLR中正确解析Regex

时间:2017-05-05 07:42:53

标签: antlr antlr4

我想解析这个

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i

和正则表达式的其他变化。 有人知道如何正确地做到这一点吗?

提前致谢。

编辑:我尝试在一个lexer规则中投入所有正则表达式符号和字符,如此

REGEX: ( DIV | ('i') | ('@') | ('[') | (']') | ('+') | ('.') | ('*') | ('-') | ('\\') | ('(') | (')') |('A') |('w') |('a') |('z') |('Z')
     //|('w')|('a'));

然后制作一个像这样的解析器规则:

regex_assignment: (REGEX)+

但存在识别错误​​(无关输入)。这绝对是因为以前在其他规则中使用过这些标志。

事实上,我实际上并不需要处理这些正则表达式分配,我只是希望它能够正确识别而不会出错。在ANTLR中有没有人有这种方法?对我来说,一个解决方案就足够了,只需将其识别为正则表达式并跳过它就可以了。例如。

1 个答案:

答案 0 :(得分:0)

不幸的是,在ANTLR语法库中还没有正则表达式语法,但是之前出现了类似的问题,例如: Regex Grammar。获得(E)BNF后,您可以将其转换为ANTLR。或者,您可以使用BNF语法检查自己的语法规则,以查看它们是否已正确定义。简单地将所有可能的输入字符放在一个规则中就不会起作用。