Files

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; }
;