繁体   English   中英

Antlr4如何避免引号规则之间出现语法错误?

[英]Antlr4 how to avoid syntax errors with anything between quotes rule?

我正在尝试构建自己的dsl,以便创建自定义规则来匹配给定的json对象。

为此,到目前为止,我已经创建了具有以下语法的两种规则:

grammar RuleGrammar;

def: 'Def(' jsonrule ')';
jsonrule: regex|composite;
regex: '"' code '"';
composite: '[' jsonrule ('&&'jsonrule)* ']';
code: ANY+;

ANY: ( '\\"' | .);

WS: [ \t\r\n]+ -> skip();

当正则表达式的“代码”包含字符“ [”或“]”时,此语法将因语法错误而失败,例如:

Def("[a-zA-Z0-9]+")
line 1:5 extraneous input '[' expecting ANY

我看到这与复合规则的定义有关,该复合规则中包含“]”。

有没有一种方法可以避免语法错误而不会在代码中转义括号?

regexcode应为词法分析器规则。 此外, code是贪婪的,因此它可能会消耗过多的输入。

像这样编写REGEX规则:

REGEX: '"' ('\\' ["\\] | ~["\\\r\n])* '"';

如果要解释错误,这是因为[字符是隐式定义的标记,正如您在composite规则中使用的那样。 由于词法分析器优先级规则,它不会被识别为ANY

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM