[antlr-interest] Position of Action Blocks in Combination with Rewrites
Randall R Schulz
rschulz at sonic.net
Sun Oct 5 11:39:41 PDT 2008
Hi,
I just discovered that in parser rules with both a rewrite clause _and_
an action block, the action block must _precede_ the rewrite clause or
the generated Java code is malformed and will not compile.
This is OK:
setOption
: Set LParen plainName RParen Period
{
if ($plainName.text.equals(cPrologStyleVariables)) {
fPrologStyleVariablesSpecified = true;
fPrologStyleVariables = true;
}
}
-> ^(Set plainName)
;
But this is not:
setOption
: Set LParen plainName RParen Period
-> ^(Set plainName)
{
if ($plainName.text.equals(cPrologStyleVariables)) {
fPrologStyleVariablesSpecified = true;
fPrologStyleVariables = true;
}
}
;
The generated Java code for this is:
-==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==-
// 810:2: -> ^( Set plainName )
{
// P9.g:810:5: ^( Set plainName )
{
CommonTree root_1 = (CommonTree)adaptor.nil();
root_1 = (CommonTree)adaptor.becomeRoot(stream_Set.nextNode(), root_1);
adaptor.addChild(root_1, stream_plainName.nextTree());
adaptor.addChild(root_0, root_1);
}
adaptor.addChild(root_0,
if ((plainName153!=null?input.toString(plainName153.start,plainName153.stop):null).equals(cPrologStyleVariables)) {
fPrologStyleVariablesSpecified = true;
fPrologStyleVariables = true;
}
);
}
-==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==-
To which javac reacts thusly:
[javac] Compiling 3 source files to /dar/tau/obj
[javac] /dar/tau/src/tau/p9/P9Parser.java:5355: illegal start of expression
[javac] if ((plainName153!=null?input.toString(plainName153.start,plainName153.stop):null).equals(cPrologStyleVariables)) {
[javac] ^
[javac] /dar/tau/src/tau/p9/P9Parser.java:5355: ';' expected
[javac] if ((plainName153!=null?input.toString(plainName153.start,plainName153.stop):null).equals(cPrologStyleVariables)) {
[javac] ^
[javac] /dar/tau/src/tau/p9/P9Parser.java:5355: ';' expected
[javac] if ((plainName153!=null?input.toString(plainName153.start,plainName153.stop):null).equals(cPrologStyleVariables)) {
[javac] ^
[javac] /dar/tau/src/tau/p9/P9Parser.java:5359: illegal start of expression
[javac] );
[javac] ^
[javac] 4 errors
I don't know if this is a bug or not, but I thought I'd report it.
I'm running ANTLR 3.1.1 with Sun JDK 1.6.0_10 rc2-b32 on x86 Linux.
Randall Schulz
More information about the antlr-interest
mailing list