我正在尝试在antlr4语法文件中设置表达式的大小
我尝试了一些不同的方法来获得大小,因为我需要限制我的大小 表达
如果我的表达式有超过7个整数/十进制值,我需要抛出一个错误。
1)weight : {match(FLOAT); if(_localctx.getText().length()>7){notifyErrorListeners("above 7 count value");}} ;
FLOAT : ('0'..'9')* '.' ('0'..'9')+ ;
2)(a+=NUMERIC* b+=DECIMAL* c+=NUMERIC+)+ {$a.size()+$b.size()+$c.size() <= 7 && $b.size()<=1}?<fail={"Exceeded weight value"}>
NUMERIC : [0-9];
DECIMAL : '.';
我正在寻找最佳解决方案
请告知
答案 0 :(得分:2)
您应该使用您语言可能最轻松的语法来解析您的输入。例如,如果一个整数只允许有6位数,那么您仍应使用如下规则创建Integer
标记:
Integer
: [0-9]+
;
词法分析器和解析器不包含整数小于或等于6个字符的任何验证。解析完成后您有一个解析树,使用一个或多个侦听器和/或访问者来执行各种语义要求的所有验证。
此策略对解析器和验证程序向用户报告可理解的错误消息的能力具有戏剧性积极影响,以至于 将验证代码放在语法本身中。