Being a new guy at ANTLR... I pretty sure this will take me a while to
digest. :)

Thanks,
Scott

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Jim Idle
Sent: Thursday, January 22, 2009 12:16 PM
Cc: [email protected]
Subject: Re: [antlr-interest] Tree Evaluation with Logical Operators
(AND and OR)


>
> 2009/1/22 Priolo, Scott <[email protected]>:
>   
>> Sorry about that, I'm trying to setup a walker that will know what to
do
>> with "OR" and "AND" operators.  I have the parser setup so that the
AST is
>> nicely formed with expr such as (< a 3).  I'm able to walk and
evaluate
>> these simple expr too. But! when I walk (or (and (< a 3) (< b 3)) (<
c 3))
>> I'm stumped.
>>     
You need to make your rules within an expression return a type, the 
formulation of which depends on what things you can evaluate. If your 
primitive types are all integer, then each stage of your expression can 
return integer and the AND and OR rules can return 0 and 1. Otherwise, 
you will need to create a class with 'operators' such as plus(), 
minus(), and() etc. It will also contain an integer, perhaps a boolean, 
perhaps a String and so on. Before applying your operations, you will 
need to coerce the types according to some orthogonal rules, as in if 
you have ^(AND INT STRING), what does that mean to you - do you convert 
the string to an integer, or does it mean "is not null" for instance, 
and what do want to do with ^(AND INT STRING) vs ^(AND STRING INT) 
(promotion rules, diamonds and so on).


If it is just Integer though, then:

if: ^(IF e=expr ....) { if ($e.intVal != 0) { ....

expr

returns [int intVal]
:
    : i=INT  { intVal = stringtoint($i.text); ... some conversion func
    : ^(AND e1=expr e2=expr) { if (stringtoint($e1.text) !=0 && 
stringtoint($e2.text) != 0) { intVal = 1; }....
 .... and so on.


Jim

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

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

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to