提问人:Tiiba 提问时间:6/5/2023 最后编辑:Tiiba 更新时间:6/5/2023 访问量:31
如何制作与分隔符内外的字符串匹配的 ANTLR 语法?
How to make an ANTLR grammar that matches strings both inside and outside a delimiter?
问:
ANTLR4 的这种语法应该将文档分解为两种类型的子字符串:wiki 和 nowiki。
grammar NoWikiText;
nowiki: '<nowiki>' ~'</nowiki>'* '</nowiki>';
wiki: ~'<nowiki>'+;
document: (wiki | nowiki)*;
输入如下:
<nowiki>2</nowiki>4<nowiki></nowiki>
我得到了两个 nowiki 匹配项。但是应该与 wiki 匹配的文本“4”被忽略了。为什么?
编辑:
这似乎有效:
grammar NoWikiText;
P1: '<nowiki>';
P2: '</nowiki>';
NP: .;
nowiki: P1 NP* P2;
wiki: NP+;
document: (wiki | nowiki)*;
答:
1赞
Bart Kiers
6/5/2023
#1
在您发布的语法中,只会创建 2 个标记:和 .否定 char 的工作方式与您预期的不同: means: “匹配除 ” 以外的任何标记(以便匹配标记)。因此,对于您的输入,和不被识别为有效令牌。<nowiki>
</nowiki>
~'</nowiki>'
</nowiki>
<nowiki>
<nowiki>2</nowiki>4<nowiki></nowiki>
2
4
下一个:单个规则如何相互左递归?
评论