eval.g

来自「antlr小例子 。」· G 代码 · 共 38 行

G
38
字号
tree grammar Eval;

options {
	language=CSharp;
    tokenVocab=Expr;
    ASTLabelType=CommonTree;
}

@header {
using System.Collections;
}

@members {
/** Map variable name to Integer object holding value */
public Hashtable memory = new Hashtable();
}

prog:   stat+ ;

stat:   expr { Console.WriteLine($expr.value); }
    |   ^('=' ID expr) { memory[$ID.text] = $expr.value; }
    ;

expr returns [int value]
    :   ^('+' a=expr b=expr)  { $value = a+b; }
    |   ^('-' a=expr b=expr)  { $value = a-b; }   
    |   ^('*' a=expr b=expr)  { $value = a*b; }
    |   ID 
        {
	        object obj = memory[$ID.text];
	        if (obj != null){
	        	$value = (int)obj;
			} else {
	        	Console.WriteLine("undefined variable " + $ID.text);
	        }
        }
    |   integer=INT                   { $value = Int32.Parse($integer.text); /* fix for 3.0b5 bug (will be fixed in next version so $INT.text works) */ }
    ;

⌨️ 快捷键说明

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