首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >antlr的规则是否与正则表达式的正则表达式不同?

antlr的规则是否与正则表达式的正则表达式不同?
EN

Stack Overflow用户
提问于 2019-06-26 18:26:57
回答 1查看 45关注 0票数 1

我正在测试ANTLR的词法规则,但我发现与所使用的表达式的规则有一些不同。

例如。

代码语言:javascript
复制
CN  : (CHN|STRING)+; 

此规则只能匹配以中文开头的字符和不能匹配字母的字符。

代码语言:javascript
复制
model
   : CN (.*?)  #modelName
   | ID (.*?)  #modelName
   ;  

此通配符(.*?)语法规则只能匹配当前定义的词汇规则(例如,点、NUM、ID、CN)。它不能与任何其他字符匹配。

代码语言:javascript
复制
Formula.g4
grammar Formula;

prog
   : expression
   ;


expression
   : left=expression operator=(MUL | DIV) right=expression                                            # arithmeticBinary
   | left=expression operator=(PLUS | MINUS) right=expression                                         # arithmeticBinary
   | '(' expression ')'                                                                               # parens
   | field                                                                                            # fields
   ;

field
   : model '.' table '.' column                     # physicalField
   | NUM                                            # numeric
   ;

model
   : CN (.*?)  #modelName
   | ID (.*?)  #modelName
   ;

table
   : ID    #tableName
   ;

column
   : ID    #columnId
   ;

SLIDE_OP: DIM_EQ |  DIM_FORWARD_OFFSET | DIM_BACKWARD_OFFSET;
DIM_EQ: '==';
DIM_FORWARD_OFFSET: '<<';
DIM_BACKWARD_OFFSET: '>>';

MUL : '*';
DIV : '/';
PLUS: '+';
MINUS: '-';

EQ  : '=';
NEQ : '<>' | '!=';
LT  : '<';
LTE : '<=';
GT  : '>';
GTE : '>=';

fragment DIGIT : [0-9];
fragment STRING : [a-zA-Z0-9_];
fragment CHN : [\u2E80-\u9FFF];


DOT : [#@$%];

NUM : ('-'|'+')?(DIGIT*'.'?DIGIT+);

ID  : STRING+;

CN  : (CHN|STRING)+;

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

// test case: aaV1.2.3-@#$*.d.b.c

我希望通配符可以匹配任何字符。(CHN|STRING)+此规则可以匹配以中文、字母或数字开头的字符串。

EN

回答 1

Stack Overflow用户

发布于 2019-06-26 21:02:04

是的,在解析器规则中,.表示“任何标记”,而不是“任何字符”。在解析器规则中表达“任何字符”的概念是不可能的,因为解析器不会将字符作为其输入-它会获得词法分析器产生的标记。

你能做的就是在你的语法末尾定义一个词法分析器规则OTHER: .;。这样,任何未知字符都将生成一个OTHER令牌,然后.可以在解析器规则中匹配该令牌。

?出于其他原因,这也是一个好主意,例如将lexer错误转换为解析器错误,解析器的错误侦听器可以处理这些错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56770594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档