40 lines
1.0 KiB
Plaintext
40 lines
1.0 KiB
Plaintext
%parser 23.lexer
|
|
%symbol Expression {
|
|
public int val;
|
|
}
|
|
|
|
%symbol Term : Expression;
|
|
|
|
%symbol Factor : Expression;
|
|
|
|
%start InputLine
|
|
|
|
InputLine :
|
|
| InputLine Assignment ';'
|
|
| InputLine Expression:a { System.Console.WriteLine(a.val); } ';'
|
|
| InputLine Expression error { System.Console.WriteLine("Semicolon expected"); }
|
|
| InputLine '\n'
|
|
;
|
|
|
|
Assignment: Variable:v '=' Expression:a { v.Value = a.val; }
|
|
;
|
|
|
|
Expression: Term:a { val = a.val; }
|
|
| '+' Term:a { val = a.val; }
|
|
| '-' Term:a { val = -a.val; }
|
|
| Expression:a '+' Term:b { val = a.val + b.val; }
|
|
| Expression:a '-' Term:b { val = a.val - b.val; }
|
|
;
|
|
|
|
Term : Factor:a { val = a.val; }
|
|
| Term:a '*' Factor:b { val = a.val * b.val ;}
|
|
| Term:a '/' Factor:b { val = a.val / b.val; }
|
|
;
|
|
|
|
Factor : Variable:a { val = a.Value; }
|
|
| Int:a { val = a; }
|
|
| '(' Expression:a ')' { val = a.val; }
|
|
| error { System.Console.WriteLine("Factor expected"); val = 0; }
|
|
| '(' Expression:a error { System.Console.WriteLine(") expected"); val = a.val; }
|
|
;
|