Antl3 actions in C
I started working with rule actions in Antlr 3 + C (A3C). In section 3.2 of the book Terence adds an action to load a stored value from a recognized ID. I decided to keep it simple and just print out some information for that recognized ID. My action grammar:
atom returns [int value]
: INT
| ID
{
printf("Position: \%d\nToken Index: \%d\nText: \%s\n", $ID.pos, $ID.index, $ID.text->chars);
}
| '(' expr ')'
As you can see, the rule for atom is looking for ID which is defined as ('a'..'z'|'A'..'Z')+. When it finds this alphabetic string it's going to print out the position of where it appeared on the line, its index and the value of the token (the matched text).
The action token ID.text is very similar to the Java equivalent, the difference being that it is a struct and to get to the characters you have to use the struct's chars variable. You can find the struct defined in antlr3string.h.
There are a couple of other properties that you can use off of the token variables. Other than .text, you can use: (this is mostly for my own reference).
- type
- line
- pos
- channel
- index
- tree
TTFN!