【发布时间】:2015-05-03 14:31:10
【问题描述】:
我正在尝试为类似 XML 的语言编写语法,我们使用
OPEN : '<<' ;
CLOSE : '>>' ;
TEXT : ~[^<]+ ;
上面 TEXT 的定义显然是错误的,因为它会在第一次出现
所以这样的事情也行不通:
TEXT : .*? '<<' ;
有没有办法在 ANTLR4 中实现这一点?
--TR
【问题讨论】:
标签: regex parsing antlr antlr4 lexer
我正在尝试为类似 XML 的语言编写语法,我们使用
OPEN : '<<' ;
CLOSE : '>>' ;
TEXT : ~[^<]+ ;
上面 TEXT 的定义显然是错误的,因为它会在第一次出现
所以这样的事情也行不通:
TEXT : .*? '<<' ;
有没有办法在 ANTLR4 中实现这一点?
--TR
【问题讨论】:
标签: regex parsing antlr antlr4 lexer
这里不需要前瞻,以下应该可以解决问题:
TEXT : ( ~'<' | '<' ~'<' )+ ;
即:匹配一系列非< 字符,或单个< 后跟其他字符。
顺便说一下,ANTLR 的语法对于否定字符类是不同的。例如,您应该写 ~[a-z] 而不是 [^a-z]。
您可能还想看看XML example grammar,它使用词法分析器模式来区分标签内的标记,这也可能对您的语法有用。
【讨论】: