[antlr-interest] Irregular AST construction

Mike Lischke mike at lischke-online.de
Wed Jul 4 00:05:57 PDT 2012


this might be related to the C target only, but I'm not sure.

Given this rule:

		| field_name
		| function_call// -> ^(FUNCTION_CALL function_call)
		| variable
		| PLUS_SYM primary
		| MINUS_SYM primary
		| BITWISE_NOT primary
		| LOGICAL_NOT primary
		| BINARY_SYM primary
		| ROW_SYM expression_list
		| EXISTS_SYM subquery
		| match_expression
		| case_expression
		| interval_expression
	(options {greedy = true;}: COLLATE_SYM identifier)*
I see a completely different tree construction in the generated parser depending on whether I enable the single (out-commented) rewrite rule or not. If I leave it out then everything is ok. With it, though, the generated code switches to using local streams for each alternative, but does not create the root_0 node (except for the function_call alternative). As a consequence the primary() function returns an empty tree for most of the alternatives.

So far I had not the impression that I have to add a rewrite rule to every alternative if I have one that has a rule. Is this a bug in code generation or should I now think to add a rule to all alternatives in such scenarios?


More information about the antlr-interest mailing list