[antlr-interest] sematic analysis ?
Kaleb Pederson
kaleb.pederson at gmail.com
Fri Mar 19 10:37:05 PDT 2010
Venkat,
One way to do what you've mentioned is to create a tree walker which
walks the AST. Then, within the AST, you'll need to do a couple of
things.
First, you need to populate a symbol table. That symbol table will
store the different objects/variables that are declared. In your
example, it would store a and b, their values, if known, and their
types.
Second, you need to do an analysis of the structure while using the
symbol table. Here's a fragment from one of my tree walking grammars:
plusMinusExpression returns [Type type]
: ^(PLUS lhs=baseExpression rhs=baseExpression)
{
typeChecker.assertIsNumericType($lhs.type);
typeChecker.assertIsNumericType($rhs.type);
typeChecker.assertEqualTypes($lhs.type, $rhs.type);
$type = $lhs.type;
}
/* ... */
;
The above calls on my typeChecker to verify that both types are
numeric (I don't use + for concatenation) and I assert that the types
are equal (since I don't have any automatic casting from int, to
double, etc.). All of my type checking happens in a single pass of a
tree walker, so it's nicely componentized.
I hope that helps.
--
Kaleb Pederson
http://kalebpederson.com
http://twitter.com/kalebpederson
On Fri, Mar 19, 2010 at 9:46 AM, venkat medhaj <hvmedhaj at gmail.com> wrote:
> Hi,
>
> I am kinda new to antlr and I wonder how to perform symantic analysis using
> the tool. I was able to generate the AST output for a small grammar and now
> I want to check for the type check errors. For ex: if I have a statement
> that looks something like
>
> int a + b , I just have to make sure that both are of type int.
>
> or if I define a twice in my input, then thats a redefine error. Can some
> one give me some insight into this ?
>
> Thanks,
> -Venkat.
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
More information about the antlr-interest
mailing list