KEMBAR78
Parsing Expression With Xtext | PDF
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
StackAST
Grammar
Text
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
StackAST
Grammar
Text
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
StackAST
Grammar
Text
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
StackAST
Grammar
Text
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
StackAST
Grammar
Text
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
StackAST
Grammar
Text
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
5.Multiplication
StackAST
Grammar
Text
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
5.Multiplication
6.PrimaryExpression
StackAST
Grammar
Text
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
5.Multiplication
6.PrimaryExpression
StackAST
Grammar
Text
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
5.Multiplication
6.PrimaryExpression
StackAST
Grammar
Text
1
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
5.Multiplication
6.PrimaryExpression
StackAST
Grammar
Text
1
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
5.Multiplication
StackAST
Grammar
Text
1
Reduce!
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
StackAST
Grammar
Text
1
Reduce!
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
StackAST
Grammar
Text
1
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
StackAST
Grammar
Text
1
+
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
StackAST
Grammar
Text
1
+
current = ruleMultiplication();
// {AdditionalExpression.left=current}
AdditionalExpression temp = new AdditionalExpression();
temp.setLeft(current);
current = temp:
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
StackAST
Grammar
Text
1
+
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
StackAST
Grammar
Text
1
+
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
StackAST
Grammar
Text
1
+
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
5.Multiplication
StackAST
Grammar
Text
1
+
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
5.Multiplication
6.PrimaryExpression
StackAST
Grammar
Text
1
+
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
4.Addition
StackAST
Grammar
Text
1
+
20
Reduce!
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
StackAST
Grammar
Text
1
+
20
Reduce!
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
StackAST
Grammar
Text
1
+
20
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
StackAST
Grammar
Text
1
+
20
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
StackAST
Grammar
Text
1
+
20
Reduce!
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
StackAST
Grammar
Text
1
+
20
*
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
StackAST
Grammar
Text
1
+
20
*
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
StackAST
Grammar
Text
1
+
20
*
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
StackAST
Grammar
Text
1
+
20
*
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
StackAST
Grammar
Text
1
+
20
*
2
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
3.PrimaryExpression
StackAST
Grammar
Text
1
+
20
*
EOF
2
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
StackAST
Grammar
Text
1
+
20
*
EOF Reduce!
2
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
2.Multiplication
StackAST
Grammar
Text
1
+
20
*
EOF
2
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
1.Addition
StackAST
Grammar
Text
1
+
20
*
EOF
2
Reduce!
Addition returns Expression:
Multiplication ({AdditionalExpression.left=current} '+' right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*;
PrimaryExpression returns Expression:
{NumberLiteral} value=INT |
'(' Addition ')';
( 1 + 20 ) * 2
StackAST
Grammar
Text
1
+
20
*
EOF
2
Finished!

Parsing Expression With Xtext

  • 1.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition StackAST Grammar Text
  • 2.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication StackAST Grammar Text
  • 3.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression StackAST Grammar Text
  • 4.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression StackAST Grammar Text
  • 5.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression StackAST Grammar Text
  • 6.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition StackAST Grammar Text
  • 7.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition 5.Multiplication StackAST Grammar Text
  • 8.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition 5.Multiplication 6.PrimaryExpression StackAST Grammar Text
  • 9.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition 5.Multiplication 6.PrimaryExpression StackAST Grammar Text
  • 10.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition 5.Multiplication 6.PrimaryExpression StackAST Grammar Text 1
  • 11.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition 5.Multiplication 6.PrimaryExpression StackAST Grammar Text 1
  • 12.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition 5.Multiplication StackAST Grammar Text 1 Reduce!
  • 13.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition StackAST Grammar Text 1 Reduce!
  • 14.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition StackAST Grammar Text 1
  • 15.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition StackAST Grammar Text 1 +
  • 16.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition StackAST Grammar Text 1 + current = ruleMultiplication(); // {AdditionalExpression.left=current} AdditionalExpression temp = new AdditionalExpression(); temp.setLeft(current); current = temp:
  • 17.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition StackAST Grammar Text 1 +
  • 18.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition StackAST Grammar Text 1 +
  • 19.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition StackAST Grammar Text 1 +
  • 20.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition 5.Multiplication StackAST Grammar Text 1 +
  • 21.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition 5.Multiplication 6.PrimaryExpression StackAST Grammar Text 1 +
  • 22.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression 4.Addition StackAST Grammar Text 1 + 20 Reduce!
  • 23.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression StackAST Grammar Text 1 + 20 Reduce!
  • 24.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression StackAST Grammar Text 1 + 20
  • 25.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression StackAST Grammar Text 1 + 20
  • 26.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication StackAST Grammar Text 1 + 20 Reduce!
  • 27.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication StackAST Grammar Text 1 + 20 *
  • 28.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication StackAST Grammar Text 1 + 20 *
  • 29.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication StackAST Grammar Text 1 + 20 *
  • 30.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication StackAST Grammar Text 1 + 20 *
  • 31.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression StackAST Grammar Text 1 + 20 * 2
  • 32.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication 3.PrimaryExpression StackAST Grammar Text 1 + 20 * EOF 2
  • 33.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication StackAST Grammar Text 1 + 20 * EOF Reduce! 2
  • 34.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition 2.Multiplication StackAST Grammar Text 1 + 20 * EOF 2
  • 35.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 1.Addition StackAST Grammar Text 1 + 20 * EOF 2 Reduce!
  • 36.
    Addition returns Expression: Multiplication({AdditionalExpression.left=current} '+' right=Multiplication)*; Multiplication returns Expression: PrimaryExpression ({MultiplyExpression.left=current} '*' right=PrimaryExpression)*; PrimaryExpression returns Expression: {NumberLiteral} value=INT | '(' Addition ')'; ( 1 + 20 ) * 2 StackAST Grammar Text 1 + 20 * EOF 2 Finished!