Thank you both (Mark & Jim), sounds like I have something to do once more. =)
On Fri, Jul 9, 2010 at 6:52 PM, Jim Idle <[email protected]> wrote: > First of all you need to produce an AST, then a tree walking grammar. In each > rule of an expression you return a type such that the expression itself > returns a type. An operator then invokes a function with the operation and > the types of the arguments, which then issues an error message and returns a > type to propagate (which is the result of the operation or an error). Future > checks do not issue error messages if any of the operands are the error type > (so you do not get myriad errors cascading), but return the error type. > > When a function is declared (or built-in declared) the arguments are typed, > you make the same check as for operators and the return type of the > expression is the return type of the function as declared. > > There is quite a bit of work involved but it is very orthogonal and so not > difficult when you see the pattern. > > Jim > > >> -----Original Message----- >> From: [email protected] [mailto:antlr-interest- >> [email protected]] On Behalf Of Martijn Reuvers >> Sent: Friday, July 09, 2010 2:20 AM >> To: antlr ANTLR >> Subject: [antlr-interest] Determine / check validity of type >> >> Hello everyone, >> >> I have a question related to determining the type returned from an >> expression on 'compile' time (not runtime!). >> >> For example take the following code: >> >> *************************** >> >> function someFunction(int a) return string { >> return "a string!" >> } >> >> int finalValue = (100+5)*2 + someFunction("a"+someFunction(1)) >> >> // Note the errors, we do not allow adding a text to an int, and the >> function invoke contains an expression returning a string (should be >> an int), but expression itself is ok. >> >> *************************** >> >> Assume the code is parsed and transformed to an AST without error. We >> are walking the tree and walk the variable 'finalValue', and see the >> value must be of type 'int'. Tree would look something like: >> >> var_assignment >> / \ >> finalValue(type=int) expression >> >> >> Where would you determine the first error? While evaluating the + >> (between left-side exp and someFunction()) and log an error there? >> >> The second error I find harder, the invoke of: someFunction(..) . >> >> Looking up the MethodSymbol for it will tell the formal parameter >> exptected is an int, but how now to determine that the expression >> given is actually returning an int? Would you walk the entire >> parameter: expression (in this case) "a"+someFunction(1) ? But as said >> before we cannot execute the code. >> >> Anyone having an idea on how to do this in a flexible (and hopefully >> not too difficult) way? >> >> Thanks a lot for thinking along! >> >> Martijn >> >> 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 > 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.
