Parsing Expression With Xtext

  • View
    2.303

  • Download
    0

  • Category

    Software

Preview:

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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!

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!

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

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

+

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:

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

+

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

+

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

+

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

+

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

+

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!

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!

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

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

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!

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

*

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

*

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

*

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

*

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

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

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

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

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!

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!

Recommended