| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- skip WHITESPACE '\s+'
- token OP '\+|-'
- token MOP '\*|/'
- token NUM '[0-9]+'
- %
- <start> ::= <exp>
- <exp> ::= <mult> <exprest>
- <exprest> **= <OP> <mult>
- <mult> ::= <value> <multrest>
- <multrest> **= <MOP> <value>
- <value> ::= <NUM>
- %
- Start
- %%{
- public void $run() {
- System.out.println(exp.calculate());
- }
- %%}
- Exp
- %%{
- public int calculate() {
- int x = mult.calculate();
- return exprest.calculate(x);
- }
- %%}
- Exprest
- %%{
- public int calculate(int resultSoFar) {
- Iterator<Token> opIt = opList.iterator();
- Iterator<Mult> multIt = multList.iterator();
- while(opIt.hasNext()) {
- String op = opIt.next().toString();
- int n = multIt.next().calculate();
- switch(op) {
- case "+": resultSoFar += n; break;
- case "-": resultSoFar -= n; break;
- }
- }
- return resultSoFar;
- }
- %%}
- Mult
- %%{
- public int calculate() {
- int x = value.getValue();
- return multrest.calculate(x);
- }
- %%}
- Multrest
- %%{
- public int calculate(int resultSoFar) {
- Iterator<Token> mopIt = mopList.iterator();
- Iterator<Value> valueIt = valueList.iterator();
- while(mopIt.hasNext()) {
- String op = mopIt.next().toString();
- int n = valueIt.next().getValue();
- switch(op) {
- case "*": resultSoFar *= n; break;
- case "/": resultSoFar /= n; break;
- }
- }
- return resultSoFar;
- }
- %%}
- Value
- %%{
- public int getValue() {
- return Integer.parseInt(num.toString());
- }
- %%}
|