📄 eval.g
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -