在《使用Antlr实现表达式引擎 》中写了主要的类,实现表达式的语法定义文件如下(使用的Antlr为3.0发布版本):

  1Antlr实现表达式引擎的语法文件grammar XExpression;
  2Antlr实现表达式引擎的语法文件
  3Antlr实现表达式引擎的语法文件options {
  4Antlr实现表达式引擎的语法文件    language=CSharp;
  5Antlr实现表达式引擎的语法文件    superClass=XExpressionBaseParser;
  6Antlr实现表达式引擎的语法文件}
  7Antlr实现表达式引擎的语法文件
  8Antlr实现表达式引擎的语法文件@header {
  9Antlr实现表达式引擎的语法文件using XSoft.XExpression;
 10Antlr实现表达式引擎的语法文件}
 11Antlr实现表达式引擎的语法文件
 12Antlr实现表达式引擎的语法文件@members {
 13Antlr实现表达式引擎的语法文件    public XExpressionParser()
 14Antlr实现表达式引擎的语法文件        : base(null)
 15Antlr实现表达式引擎的语法文件    {
 16Antlr实现表达式引擎的语法文件    }
 17Antlr实现表达式引擎的语法文件    
 18Antlr实现表达式引擎的语法文件    public override void Compile()
 19Antlr实现表达式引擎的语法文件    {
 20Antlr实现表达式引擎的语法文件        TokenStream = new CommonTokenStream(new XExpressionLexer(new ANTLRStringStream(Expression))); 
 21Antlr实现表达式引擎的语法文件        ResultNode = xExpression();
 22Antlr实现表达式引擎的语法文件    }
 23Antlr实现表达式引擎的语法文件}
 24Antlr实现表达式引擎的语法文件
 25Antlr实现表达式引擎的语法文件xExpression returns[ExprNode value]
 26Antlr实现表达式引擎的语法文件  : a= logicalOrExpression {$value=a;};
 27Antlr实现表达式引擎的语法文件
 28Antlr实现表达式引擎的语法文件logicalOrExpression returns[ExprNode value]
 29Antlr实现表达式引擎的语法文件  : a=logicalAndExpression {$value=a;}
 30Antlr实现表达式引擎的语法文件    (f=OR b=logicalAndExpression  {GetNestedResultNode(ref $value, f, b);} )* ;
 31Antlr实现表达式引擎的语法文件                        
 32Antlr实现表达式引擎的语法文件logicalAndExpression returns[ExprNode value]
 33Antlr实现表达式引擎的语法文件  : a=relationalExpression {$value=a;}
 34Antlr实现表达式引擎的语法文件    (f=AND b=relationalExpression  {GetNestedResultNode(ref $value, f, b);} )* ;                        
 35Antlr实现表达式引擎的语法文件
 36Antlr实现表达式引擎的语法文件relationalExpression returns[ExprNode value]
 37Antlr实现表达式引擎的语法文件    :  a=additiveExpression {$value=a;}
 38Antlr实现表达式引擎的语法文件     ((f=EQUAL |  f=NOT_EQUAL  | f=LESS_THAN |  f=LESS_THAN_OR_EQUAL | f=GREATER_THAN | f=GREATER_THAN_OR_EQUAL)  b=additiveExpression {GetNestedResultNode(ref $value, f, b);}  )?
 39Antlr实现表达式引擎的语法文件    ;
 40Antlr实现表达式引擎的语法文件  
 41Antlr实现表达式引擎的语法文件additiveExpression returns[ExprNode value]
 42Antlr实现表达式引擎的语法文件  :    a=multiplyExpression {$value=a;}
 43Antlr实现表达式引擎的语法文件  ((f=PLUS|f=MINUS) b=multiplyExpression {GetNestedResultNode(ref $value, f, b);}  )* 
 44Antlr实现表达式引擎的语法文件  ;
 45Antlr实现表达式引擎的语法文件
 46Antlr实现表达式引擎的语法文件
 47Antlr实现表达式引擎的语法文件multiplyExpression returns[ExprNode value]
 48Antlr实现表达式引擎的语法文件  : a=powExpr {$value=a;}
 49Antlr实现表达式引擎的语法文件   ((f=STAR| f=DIV | f=MOD) b=powExpr {GetNestedResultNode(ref $value, f, b);}  )* ;
 50Antlr实现表达式引擎的语法文件   
 51Antlr实现表达式引擎的语法文件powExpr  returns[ExprNode value]
 52Antlr实现表达式引擎的语法文件   : a=unaryExpression  {$value=a;}
 53Antlr实现表达式引擎的语法文件   (f=POWER b=unaryExpression {GetNestedResultNode(ref $value, f, b);}  )? ;   
 54Antlr实现表达式引擎的语法文件
 55Antlr实现表达式引擎的语法文件unaryExpression returns[ExprNode value]
 56Antlr实现表达式引擎的语法文件    :  (f=PLUS | f=MINUS | f=NOT) b=unaryExpression    {GetNestedResultNodeArgsNotIncludeValue(ref $value, f, b);}   
 57Antlr实现表达式引擎的语法文件    |  a=primaryExpression {$value=a;}
 58Antlr实现表达式引擎的语法文件    ;
 59Antlr实现表达式引擎的语法文件       
 60Antlr实现表达式引擎的语法文件primaryExpression returns[ExprNode value]
 61Antlr实现表达式引擎的语法文件   : (a=parenExpr|a=literal | a=function)  {$value=a;};
 62Antlr实现表达式引擎的语法文件
 63Antlr实现表达式引擎的语法文件parenExpr returns[ExprNode value]
 64Antlr实现表达式引擎的语法文件   :    LPAREN a=xExpression RPAREN {$value=a;}; 
 65Antlr实现表达式引擎的语法文件    
 66Antlr实现表达式引擎的语法文件literal returns[ExprNode value]
 67Antlr实现表达式引擎的语法文件  : (a=numbericLiteral| a= stringLiteral | a=datetimeLiteral)  {$value=a;};   
 68Antlr实现表达式引擎的语法文件
 69Antlr实现表达式引擎的语法文件function returns[ExprNode value]
 70Antlr实现表达式引擎的语法文件@init { ArrayList list_arg = new ArrayList(); }
 71Antlr实现表达式引擎的语法文件  :    f=IDENTIFIER LPAREN (arg=argument {list_arg.Add(arg);} (COMMA arg=argument { list_arg.Add(arg); }  )*)? RPAREN
 72Antlr实现表达式引擎的语法文件  { $value = GetNestedResultNode(f, list_arg); }
 73Antlr实现表达式引擎的语法文件  ;
 74Antlr实现表达式引擎的语法文件
 75Antlr实现表达式引擎的语法文件argument returns[ExprNode value]
 76Antlr实现表达式引擎的语法文件  : a=xExpression  {$value=a;};   
 77Antlr实现表达式引擎的语法文件
 78Antlr实现表达式引擎的语法文件numbericLiteral returns[ExprNode value]
 79Antlr实现表达式引擎的语法文件  :  a=INTEGER_LITERAL {$value = new ConstNode(new IntegerExprData(Convert.ToInt32(a.Text)));}    
 80Antlr实现表达式引擎的语法文件   | a=DECIMAL_LITERAL {$value = new ConstNode(new DecimalExprData(Convert.ToDecimal(Convert.ToDouble(a.Text)))); }
 81Antlr实现表达式引擎的语法文件   ;
 82Antlr实现表达式引擎的语法文件   
 83Antlr实现表达式引擎的语法文件datetimeLiteral returns[ExprNode value]
 84Antlr实现表达式引擎的语法文件  :  a=DATETIME_LITERAL 
 85Antlr实现表达式引擎的语法文件  {$value = new ConstNode(new DateTimeExprData(DateTime.Parse(a.Text.Substring(1, a.Text.Length - 2))));}    
 86Antlr实现表达式引擎的语法文件  
 87Antlr实现表达式引擎的语法文件  ;
 88Antlr实现表达式引擎的语法文件   
 89Antlr实现表达式引擎的语法文件stringLiteral returns[ExprNode value]
 90Antlr实现表达式引擎的语法文件  :  a=STRING_LITERAL  
 91Antlr实现表达式引擎的语法文件    {$value = new ConstNode(new StringExprData(a.Text.Substring(1, a.Text.Length - 2)));}    
 92Antlr实现表达式引擎的语法文件  ;
 93Antlr实现表达式引擎的语法文件   
 94Antlr实现表达式引擎的语法文件AND: 'and';
 95Antlr实现表达式引擎的语法文件OR: 'or';
 96Antlr实现表达式引擎的语法文件
 97Antlr实现表达式引擎的语法文件NOT: 'not';
 98Antlr实现表达式引擎的语法文件
 99Antlr实现表达式引擎的语法文件COMMA : ','  ;
100Antlr实现表达式引擎的语法文件
101Antlr实现表达式引擎的语法文件PLUS: '+'  ;
102Antlr实现表达式引擎的语法文件MINUS: '-'  ;
103Antlr实现表达式引擎的语法文件DIV: '/'  ;
104Antlr实现表达式引擎的语法文件STAR: '*'  ;
105Antlr实现表达式引擎的语法文件MOD: '%' ;
106Antlr实现表达式引擎的语法文件POWER: '^' ;
107Antlr实现表达式引擎的语法文件
108Antlr实现表达式引擎的语法文件EQUAL: '=';
109Antlr实现表达式引擎的语法文件NOT_EQUAL: '<>'  ;
110Antlr实现表达式引擎的语法文件LESS_THAN: '<'  ;
111Antlr实现表达式引擎的语法文件LESS_THAN_OR_EQUAL: '<='  ;
112Antlr实现表达式引擎的语法文件GREATER_THAN: '>'  ;
113Antlr实现表达式引擎的语法文件GREATER_THAN_OR_EQUAL: '>=;
114Antlr实现表达式引擎的语法文件
115Antlr实现表达式引擎的语法文件LPAREN:    '(';
116Antlr实现表达式引擎的语法文件RPAREN:    ')';
117Antlr实现表达式引擎的语法文件
118Antlr实现表达式引擎的语法文件DATETIME_LITERAL: '\'' Digit Digit Digit Digit '-' Digit (Digit)? '-' Digit (Digit)?  '\'';
119Antlr实现表达式引擎的语法文件
120Antlr实现表达式引擎的语法文件STRING_LITERAL    : '"'(~'"')* '"' ;
121Antlr实现表达式引擎的语法文件
122Antlr实现表达式引擎的语法文件IDENTIFIER:    LETTER (LETTER|Digit)*    ;
123Antlr实现表达式引擎的语法文件    
124Antlr实现表达式引擎的语法文件fragment
125Antlr实现表达式引擎的语法文件LETTER    :    'A'..'Z'|'a'..'z'|'_';
126Antlr实现表达式引擎的语法文件
127Antlr实现表达式引擎的语法文件DECIMAL_LITERAL:   (INTEGER_LITERAL)? '.' Digit* Exponent? ;    
128Antlr实现表达式引擎的语法文件fragment
129Antlr实现表达式引擎的语法文件Exponent : ('e'|'E') INTEGER_LITERAL;
130Antlr实现表达式引擎的语法文件
131Antlr实现表达式引擎的语法文件INTEGER_LITERAL : Digit+ ;    
132Antlr实现表达式引擎的语法文件
133Antlr实现表达式引擎的语法文件fragment
134Antlr实现表达式引擎的语法文件Digit    :'0'..'9';
135Antlr实现表达式引擎的语法文件
136Antlr实现表达式引擎的语法文件fragment
137Antlr实现表达式引擎的语法文件SIGN    :    '+' | '-';
138Antlr实现表达式引擎的语法文件
139Antlr实现表达式引擎的语法文件WS  :   (' '|'\t')+ { $channel=HIDDEN; } ;
140Antlr实现表达式引擎的语法文件




 

相关文章:

  • 2021-04-09
  • 2021-08-08
  • 2022-12-23
  • 2021-05-20
  • 2022-12-23
  • 2022-12-23
  • 2021-12-13
猜你喜欢
  • 2021-06-16
  • 2022-03-06
  • 2022-02-14
  • 2021-05-26
  • 2022-12-23
  • 2021-06-13
  • 2021-09-13
相关资源
相似解决方案