如何在不影响其他规则的情况下匹配Antlr4中的任何字符?

时间:2019-06-27 04:14:02

标签: antlr4

我想在antlr中定义一个规则,该字段由三部分组成:模型,表,列。分隔符为“。”,同时,模型可以是任何字符,这意味着模型也可以具有字符“。”。

但是,如果我为模型定义了一个可以匹配任何字符的正则表达式,那么应该被识别为表或列的输入部分将作为模型的一部分进行匹配。     例如,我有一个字符串“ @ ABC @ .def.cdf.efa.adef”,我想将一个模型命名为“ @ ABC @ .def.cdf”,将表命名为“ efa”,将列命名为“ adef” ,但实际上我得到的是模型为'@ ABC @ .def.cdf',表为空,列为空。

/** Grammers always start with a grammer header. This grammer */
/** is called MerakDsl and must match the filename: MerakDsl.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
   ;

table
   : ID    #tableName
   ;

column
   : ID    #columnId
   ;

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

//NUM : [-+]?[0-9]+;
//NUM : [-]?[0-9]+(.[0-9]+)?;
NUM : ('-'|'+')?(DIGIT*'.'?DIGIT+);

// FILED(INDEX/DIM)
ID  : STRING+;

CN  : (.)+;

WS  : [ \t\r\n]+ -> skip ;    // toss out whitespace

那么如何在不影响其他规则的情况下匹配Antlr中的任何字符?

0 个答案:

没有答案