表达式(1)

和那个没有除法的计算器比(也许是留给我们的作业 :p),这个例子比较象样:
 
先看词法:

class ExprLexer extends Lexer;

WS : (' '
 | '/t'
 | '/n'
 | '/r')
  { _ttype = Token.SKIP; }
 ;

LPAREN: '('
 ;

RPAREN: ')'
 ;

PLUS_MINUS: '+' | '-' // 加减
 ;

MULT_DIV : '*' | '/'  // 乘除
   ;

ASSIGN : '='  // 赋值
 ;

COMMA : ','
   ;
  
CHAR_LITERAL
 : '/'' (ESC|~'/'') '/'' // 支持转义符的字符定义
 ;

STRING_LITERAL    // 支持转义符的字符串
 : '"' (ESC|~'"')* '"'
 ;

protected
ESC : '//'   // 转义符
  ( 'n'
  | 'r'
  | 't'
  | 'b'
  | 'f'
  | '"'
  | '/''
  | '//'
  | ('0'..'3')
   (
    options {
     warnWhenFollowAmbig = false;
    }
   : ('0'..'9')
    ( 
     options {
      warnWhenFollowAmbig = false;
     }
    : '0'..'9'
    )?
   )?
  | ('4'..'7')
   (
    options {
     warnWhenFollowAmbig = false;
    }
   : ('0'..'9')
   )?
  )
 ;

protected
DIGIT
 : '0'..'9'  // 数码
 ;

INT
 : (DIGIT)+   // 整数
 ;

ID
options {    // 标识符
 testLiterals = true;  
}
 : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*
 ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值