⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser.cup

📁 《java virtual machine》是研究jvm的一本书
💻 CUP
字号:
// JavaCup specification for a simple expression evaluator (w/ actions)

import java_cup.runtime.*;

/* Preliminaries to set up and use the scanner.  */
init with {: scanner.init();              :};
scan with {: return scanner.next_token(); :};

/* Terminals (tokens returned by the scanner). */
terminal token     SEMI, PLUS, MINUS, TIMES, DIVIDE, MOD,  LPAREN, RPAREN;
terminal int_token NUMBER;

/* Non terminals */
non terminal symbol     expr_list, expr_part;
non terminal int_token  expr, term, factor;

/* The grammar */
expr_list ::= expr_list expr_part 
	      | 
              expr_part;

expr_part ::= expr:e 
	      {: System.out.println("= " + e.int_val); :} 
              SEMI              
	      ;

expr      ::= expr:e1 PLUS term:e2    
	      {: RESULT.int_val = e1.int_val + e2.int_val; :} 
	      | 
              expr:e1 MINUS term:e2    
              {: RESULT.int_val = e1.int_val - e2.int_val; :} 
	      | 
              term:e1                  
	      {: RESULT.int_val = e1.int_val; :} 
	      ;

term      ::= term:e1 TIMES factor:e2 
	      {: RESULT.int_val = e1.int_val * e2.int_val; :} 
	      | 
              term:e1 DIVIDE factor:e2 
	      {: RESULT.int_val = e1.int_val / e2.int_val; :} 
	      | 
              term:e1 MOD factor:e2 
	      {: RESULT.int_val = e1.int_val % e2.int_val; :} 
	      | 
              factor:e                 
	      {: RESULT.int_val = e.int_val; :} 
	      ;

factor    ::= NUMBER:n                 
	      {: RESULT.int_val = n.int_val;  :} 
	      | 
              MINUS factor:e             
	      {: RESULT.int_val = -e.int_val; :} 
	      | 
              LPAREN expr:e RPAREN     
	      {: RESULT.int_val = e.int_val;  :} 
	      ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -