T.R*_*.R. 3 regex parsing antlr lexer antlr4
我正在尝试为类似 XML 的语言编写语法,其中我们使用 << 而不是 < 字符。这是词法分析器的部分快照,其中 TEXT 表示(外部)标签之间的文本:
OPEN : '<<' ;
CLOSE : '>>' ;
TEXT : ~[^<]+ ;
Run Code Online (Sandbox Code Playgroud)
上面 TEXT 的定义显然是错误的,因为即使一个后面没有另一个 <,它也会在第一次出现 < 时停止。我正在寻找一种方法来定义“捕获所有内容,直到遇到 <<”,但不将 << 包含在匹配中。
所以这样的事情也行不通:
TEXT : .*? '<<' ;
Run Code Online (Sandbox Code Playgroud)
有没有办法在 ANTLR4 中实现这一点?
——TR
这里不需要先行查看,以下应该可以解决问题:
TEXT : ( ~'<' | '<' ~'<' )+ ;
Run Code Online (Sandbox Code Playgroud)
即:匹配一系列非<字符,或单个字符<后跟其他字符。
顺便说一下,ANTLR 的语法对于负字符类是不同的。你应该写~[a-z]而不是[^a-z]例如。
您可能还想查看XML 示例语法,它使用词法分析器模式来区分标记内的标记,这也可能对您的语法有用。
| 归档时间: |
|
| 查看次数: |
1368 次 |
| 最近记录: |