Hi,

I am writing a tree grammar for Lua. In the language is defended operator
precedence. The table looks like this:

  or

  and

  <     >     <=    >=    ~=    ==

  ..

  +     -

  *     /     %

  not   #     - (unary)

And here are my rules:

exp

                :              logicalOrExpression;





// level 7 - " OR "

logicalOrExpression

                : logicalAndExpression ( 'or' logicalAndExpression )+
->^(BINOP logicalAndExpression( OR logicalAndExpression)+ )

                | logicalAndExpression;

// level 6 - " AND, NOT "



logicalAndExpression

                : likeExpression ( AND likeExpression )+ -> ^(BINOP
likeExpression (AND likeExpression)+)

                | likeExpression;



// level 5 - " <     >     <=    >=    ~=    == "



likeExpression

                :              conExpression (LESS conExpression)+ ->
^(BINOP conExpression (LESS conExpression)+)

                |             conExpression (MORE conExpression)+ -> ^(BINOP
conExpression (MORE conExpression)+)

                |             conExpression (LESSEQ conExpression)+ ->
^(BINOP conExpression (LESSEQ conExpression)+)

                |             conExpression (MOREEQ conExpression)+ ->
^(BINOP conExpression (MOREEQ conExpression)+)

                |             conExpression (NOTBINEQ conExpression)+ ->
^(BINOP conExpression (NOTBINEQ conExpression)+)

                |             conExpression (BINEQ conExpression)+ ->
^(BINOP conExpression (BINEQ conExpression)+)

                |             conExpression;



// level 6 - ".."

conExpression

                :              additiveExpression (BINEQ
additiveExpression)+ -> ^(BINOP additiveExpression (STRCON
additiveExpression)+)

                |             additiveExpression;



// level 7 - " + -"

additiveExpression

                :              multiplyExpression (ADD multiplyExpression)+
-> ^(BINOP_ADD multiplyExpression ( multiplyExpression)+)

                |             multiplyExpression (SUB multiplyExpression)+
-> ^(BINOP multiplyExpression (SUB multiplyExpression)+)

                |             multiplyExpression;

// level 8 - "*     /     % "

multiplyExpression

                :              unaryExpression (MUL unaryExpression)+ ->
^(BINOP unaryExpression (MUL unaryExpression)+)

                |             unaryExpression (DIV unaryExpression)+ ->
^(BINOP unaryExpression (DIV unaryExpression)+)

                |             unaryExpression (ABS unaryExpression)+ ->
^(BINOP unaryExpression (ABS unaryExpression)+)

                |             unaryExpression ;

// level 9 - unary operators "not   #     -"

unaryExpression

                :              ('not' powExpression)+ -> ^(UOP ^(UNOT
powExpression)+)

                |             (USUB powExpression)+ -> ^(UOP ^(UNOT
powExpression)+)

                |             (ULEN powExpression)+ -> ^(UOP ^(UNOT
powExpression)+)

                |             powExpression;

// level 10 - "^"

powExpression

                :              primaryExpression (POW primaryExpression)+ ->
^(BINOP primaryExpression (POW primaryExpression)+)

                |             primaryExpression;



When I build my parser I need the option k = 1 or my PC gets out of memory.
Is there a better and elegant way to solve this problem?

Regards

Boris Koprinarov

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"il-antlr-interest" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en
-~----------~----~----~----~------~----~------~--~---

List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe: 
http://www.antlr.org/mailman/options/antlr-interest/your-email-address

Reply via email to