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 1.Addition Stack AST Grammar Text

Parsing Expression With Xtext

Embed Size (px)

Citation preview

Page 1: Parsing Expression With Xtext

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.AdditionStackAST

Grammar

Text

Page 2: Parsing Expression With Xtext

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.Addition2.Multiplication

StackAST

Grammar

Text

Page 3: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression

StackAST

Grammar

Text

Page 4: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression

StackAST

Grammar

Text

Page 5: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression

StackAST

Grammar

Text

Page 6: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition

StackAST

Grammar

Text

Page 7: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition5.Multiplication

StackAST

Grammar

Text

Page 8: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition5.Multiplication6.PrimaryExpression

StackAST

Grammar

Text

Page 9: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition5.Multiplication6.PrimaryExpression

StackAST

Grammar

Text

Page 10: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition5.Multiplication6.PrimaryExpression

StackAST

Grammar

Text

1

Page 11: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition5.Multiplication6.PrimaryExpression

StackAST

Grammar

Text

1

Page 12: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition5.Multiplication

StackAST

Grammar

Text

1

Reduce!

Page 13: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition

StackAST

Grammar

Text

1

Reduce!

Page 14: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition

StackAST

Grammar

Text

1

Page 15: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition

StackAST

Grammar

Text

1

+

Page 16: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition

StackAST

Grammar

Text

1

+

current = ruleMultiplication();// {AdditionalExpression.left=current}AdditionalExpression temp = new AdditionalExpression();temp.setLeft(current);current = temp:

Page 17: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition

StackAST

Grammar

Text

1

+

Page 18: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition

StackAST

Grammar

Text

1

+

Page 19: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition

StackAST

Grammar

Text

1

+

Page 20: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition5.Multiplication

StackAST

Grammar

Text

1

+

Page 21: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition5.Multiplication6.PrimaryExpression

StackAST

Grammar

Text

1

+

Page 22: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression4.Addition

StackAST

Grammar

Text

1

+

20

Reduce!

Page 23: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression

StackAST

Grammar

Text

1

+

20

Reduce!

Page 24: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression

StackAST

Grammar

Text

1

+

20

Page 25: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression

StackAST

Grammar

Text

1

+

20

Page 26: Parsing Expression With Xtext

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.Addition2.Multiplication

StackAST

Grammar

Text

1

+

20

Reduce!

Page 27: Parsing Expression With Xtext

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.Addition2.Multiplication

StackAST

Grammar

Text

1

+

20

*

Page 28: Parsing Expression With Xtext

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.Addition2.Multiplication

StackAST

Grammar

Text

1

+

20

*

Page 29: Parsing Expression With Xtext

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.Addition2.Multiplication

StackAST

Grammar

Text

1

+

20

*

Page 30: Parsing Expression With Xtext

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.Addition2.Multiplication

StackAST

Grammar

Text

1

+

20

*

Page 31: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression

StackAST

Grammar

Text

1

+

20

*

2

Page 32: Parsing Expression With Xtext

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.Addition2.Multiplication3.PrimaryExpression

StackAST

Grammar

Text

1

+

20

*

EOF

2

Page 33: Parsing Expression With Xtext

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.Addition2.Multiplication

StackAST

Grammar

Text

1

+

20

*

EOF Reduce!

2

Page 34: Parsing Expression With Xtext

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.Addition2.Multiplication

StackAST

Grammar

Text

1

+

20

*

EOF

2

Page 35: Parsing Expression With Xtext

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.AdditionStackAST

Grammar

Text

1

+

20

*

EOF

2

Reduce!

Page 36: Parsing Expression With Xtext

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!