[antlr-interest] Successful parser return is always null

Jim Idle jimi at temporal-wave.com
Wed Dec 16 06:57:42 PST 2009


You are specifying that the output is a template, but you are not building any templates in your grammar, hence the return is null. 

Jim

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Andrey Pohilko
> Sent: Wednesday, December 16, 2009 4:05 AM
> To: antlr-interest at antlr.org
> Subject: [antlr-interest] Successful parser return is always null
> 
> Hello!
> 
> I have a Bpp.g that successfully processed by antlrworks
> antlrworks-1.3.1.jar, I can see parse tree. When I use generated parser
> and
> lexer classes, my call to parser g.specification() always returns null,
> but
> examples in internet show that there must be an object. My test code
> and
> Bpp.g follows.
> 
> What I am doing wrong?
> 
> Thanks,
> Andrey
> 
> Java code:
> // ---------------------
> public class BppIDL
> {
>    public void dojob(String filename) throws IOException,
> RecognitionException
>    {
>       BppLexer lex = new BppLexer(new ANTLRFileStream(filename));
>       CommonTokenStream tokens = new CommonTokenStream(lex);
>       BppParser g = new BppParser(tokens);
> 
>       specification_return tree = g.specification();
>       System.out.println(tree); // why NULL here???
>       System.out.println("Done");
>    }
> }
> // ---------------------
> 
> Input file used:
> interface Server32rpc
> {
>     RPCALL IsServerListening
> 			(
> 			);
> }
> 
> // -----------------------------------------------
> 
> Grammar used to generate classes:
> grammar Bpp;
> options {k=2; backtrack=true; memoize=true; output=template;}
> 
> @header
> {
> import org.antlr.stringtemplate.*;
> }
> 
> @lexer::members
> {
> protected boolean enumIsKeyword = true;
> }
> 
> specification
> 	:	header_decl? import_decl* definition+
> 	;
> 
> header_decl
> 	: '[ uuid (' UUID '),'
>   		'version (1.0),'
>   		'pointer_default(unique)'
> 		']'
> 	;
> 
> 
> definition
> 	:	type_decl ';'
> 	|	(const_decl ';')
> 	|	(except_decl ';')
> 	|	(interface_or_forward_decl )
> 	|	(module ';')
> 	|	value ';'
> 	|	type_id_decl ';'
> 	|	type_prefix_decl ';'
> 	|	event ';'
> 	|	component ';'
> 	|	home_decl ';'
> 	;
> 
> module
> 	:	'module' ID '{' definition+ '}'
> 	;
> 
> interface_or_forward_decl
> 	:	interface_decl ';'?
> 	|	forward_decl ';'
> 	;
> 
> interface_decl
> 	:	interface_header '{' interface_body '}'
> 	;
> 
> forward_decl
> 	:	( 'abstract' | 'local' )? 'interface' ID
> 	;
> 
> interface_header
> 	:	( 'abstract' | 'local' )? 'interface' ID
> 		( interface_inheritance_spec )?
> 	;
> 
> interface_body
> 	:
> 		export*
> 	;
> 
> export
> 	:	type_decl ';'
> 	|	include_spec
> 	|	(const_decl ';')
> 	|	(except_decl ';')
> 	|	(attr_decl ';')
> 	|	(op_decl ';')
> 	|	(type_id_decl ';')
> 	|	(type_prefix_decl ';')
> 	;
> 
> include_decl
> 	: include_spec*
> 	;
> 
> include_spec
> 	: '#' 'include' STRING_LITERAL
> 	;
> 
> 
> interface_inheritance_spec
> 	:	':' interface_name
> 		( ',' interface_name )*
> 	;
> 
> interface_name
> 	:	scoped_name
> 	;
> 
> scoped_name
> 	:	( '::' )? ID ( '::' ID )*
> 	;
> 
> value
> 	:	( value_decl | value_abs_decl | value_box_decl |
> value_forward_decl )
> 	;
> 
> value_forward_decl
> 	:	( 'abstract' )? 'valuetype' ID
> 	;
> 
> value_box_decl
> 	:	'valuetype' ID type_spec
> 	;
> 
> value_abs_decl
> 	:	'abstract' 'valuetype' ID
> 		( value_inheritance_spec )?
> 		'{' export* '}'
> 	;
> 
> value_decl
> 	:	value_header '{'  value_element* '}'
> 	;
> 
> value_header
> 	:	('custom' )? 'valuetype' ID
> 		( value_inheritance_spec )?
> 	;
> 
> value_inheritance_spec
> 	:	( ':' ( 'truncatable' )? value_name
> 		( ',' value_name )* )?
> 		( 'supports' interface_name
> 		( ',' interface_name )* )?
> 	;
> 
> value_name
> 	:	scoped_name
> 	;
> 
> value_element
> 	:	export |  state_member | init_decl
> 	;
> 
> state_member
> 	:	( 'public' | 'private' )
> 		type_spec declarators ';'
> 	;
> 
> init_decl
> 	:	'factory' ID
> 		'(' ( init_param_decls )? ')'
> 		( raises_expr )? ';'
> 	;
> 
> init_param_decls
> 	:	init_param_decl ( ',' init_param_decl )*
> 	;
> 
> init_param_decl
> 	:	init_param_attribute param_type_spec
> 		simple_declarator
> 	;
> 
> init_param_attribute
> 	:	'in'
> 	;
> 
> const_decl
> 	:	'const' const_type
> 		ID '=' const_exp
> 	;
> 
> const_type
> 	:	integer_type
> 	|	unsigned_char_type
> 	|	char_type
> 	|	wide_char_type
> 	|	boolean_type
> 	|	floating_pt_type
> 	|	string_type
> 	|	wide_string_type
> 	|	fixed_pt_const_type
> 	|	scoped_name
> 	|	octet_type
> 	;
> 
> const_exp
> 	:	or_expr
> 	;
> 
> or_expr
> 	:	xor_expr ( '|' xor_expr )*
> 	;
> 
> xor_expr
> 	:	and_expr ( '^' and_expr )*
> 	;
> 
> and_expr
> 	:	shift_expr ( '&' shift_expr )*
> 	;
> 
> shift_expr
> 	:	add_expr ( ( '>>' | '<<' ) add_expr )*
> 	;
> 
> add_expr
> 	:	mult_expr ( ( '+' | '-' ) mult_expr )*
> 	;
> 
> mult_expr
> 	:	unary_expr (( '*' | '/' | '%' )  unary_expr)*
> 	;
> 
> unary_expr
> 	:	unary_operator? primary_expr
> 	;
> 
> unary_operator
> 	:	'-'
> 	|	'+'
> 	|	'~'
> 	;
> 
> primary_expr
> 	:	scoped_name
> 	|	literal
> 	|	'(' const_exp ')'
> 	;
> 
> literal
> 	:	HEX_LITERAL
> 	|	INTEGER_LITERAL
> 	|	STRING_LITERAL
> 	|	WIDE_STRING_LITERAL
> 	|	CHARACTER_LITERAL
> 	|	WIDE_CHARACTER_LITERAL
> 	|	FLOATING_PT_LITERAL
> 	|	BOOLEAN_LITERAL
> 	;
> 
> positive_int_const
> 	:	const_exp
> 	;
> 
> type_decl
> 	:	'typedef' type_declarator
> 	|	struct_type
> 	|	union_type
> 	|	enum_type
> 	|	'native' simple_declarator
> 	|	constr_forward_decl
> 	;
> 
> type_declarator
> 	:	'const'? type_spec '_stdcall'? declarators
> 	;
> 
> type_spec
> 	:	simple_type_spec
> 	|	constr_type_spec
> 	;
> 
> simple_type_spec
> 	:	pointer_to_base_type_spec
> 	|	base_type_spec
> 	|	template_type_spec
> 	|	scoped_name
> 	|	function_type_spec
> 	;
> 
> function_type_spec
> 	: ID '(' ','? '*'? const_exp ')'
> 	;
> 
> pointer_to_base_type_spec
> 	: base_type_spec '*'+
> 	;
> 
> 
> base_type_spec
> 	:	floating_pt_type
> 	|	integer_type
> 	|	unsigned_char_type
> 	|	char_type
> 	|	wide_char_type
> 	|	boolean_type
> 	|	octet_type
> 	|	any_type
> 	|	object_type
> 	|	value_base_type
> 	;
> 
> template_type_spec
> 	:	sequence_type
> 	|	string_type
> 	|	wide_string_type
> 	|	fixed_pt_type
> 	;
> 
> constr_type_spec
> 	:	struct_type
> 	|	union_type
> 	|	enum_type
> 	;
> 
> declarators
> 	:	declarator ( ',' declarator )*
> 	;
> 
> declarator
> 	:	simple_declarator
> 	|	complex_declarator
> 	;
> 
> simple_declarator
> 	:	ID
> 	;
> 
> complex_declarator
> 	:	array_declarator
> 	;
> 
> floating_pt_type
> 	:	'float'
> 	|	'double'
> 	|	'long' 'double'
> 	;
> 
> integer_type
> 	:	signed_int
> 	|	unsigned_int
> 	;
> 
> signed_int
> 	:	signed_short_int
> 	|	signed_long_int
> 	|	signed_longlong_int
> 	|	regular_int
> 	;
> 
> regular_int	: 'int'
> 	;
> 
> 
> signed_short_int
> 	:	'short'
> 	;
> 
> signed_long_int
> 	:	'long'
> 	;
> 
> signed_longlong_int
> 	:	'long' 'long'
> 	;
> 
> unsigned_int
> 	:	unsigned_short_int
> 	|	unsigned_long_int
> 	|	unsigned_longlong_int
> 	|	'unsigned' regular_int
> 	;
> 
> unsigned_short_int
> 	:	'unsigned' 'short'
> 	;
> 
> unsigned_long_int
> 	:	'unsigned' 'long'
> 	;
> 
> unsigned_longlong_int
> 	:	'unsigned' 'long' 'long'
> 	;
> 
> char_type
> 	:	'char'
> 	;
> 
> unsigned_char_type
> 	:	'unsigned' 'char'
> 	;
> 
> wide_char_type
> 	:	'wchar'
> 	;
> 
> boolean_type
> 	:	'boolean'
> 	;
> 
> octet_type
> 	:	'octet'
> 	;
> 
> any_type
> 	:	'any'
> 	;
> 
> object_type
> 	:	'Object'
> 	;
> 
> struct_type
> 	:	'struct' ID '{' member_list '}'
> 	;
> 
> member_list
> 	:	member+
> 	;
> 
> member
> 	:	type_spec declarators ';'
> 	;
> 
> union_type
> 	:	'union' ID
> 		'switch' '(' switch_type_spec ')'
> 		'{' switch_body '}'
> 	;
> 
> switch_type_spec
> 	:	integer_type
> 	|	unsigned_char_type
> 	|	char_type
> 	|	boolean_type
> 	|	enum_type
> 	|	scoped_name
> 	;
> 
> switch_body
> 	:	case_stmt+
> 	;
> 
> case_stmt
> 	:	case_label+ element_spec ';'
> 	;
> 
> case_label
> 	:	'case' const_exp ':'
> 	|	'default' ':'
> 	;
> 
> element_spec
> 	:	type_spec declarator
> 	;
> 
> enum_type
> 	:	'enum' ID
> 		'{' enumerator ( ',' enumerator )* '}'
> 	;
> 
> enumerator
> 	:	ID
> 	;
> 
> sequence_type
> 	:	'sequence' '<' simple_type_spec ',' positive_int_const '>'
> 	|	'sequence' '<' simple_type_spec '>'
> 	;
> 
> string_type
> 	:	'string' '<' positive_int_const '>'
> 	|	'string'
> 	;
> 
> wide_string_type
> 	:	'wstring' '<' positive_int_const '>'
> 	|	'wstring'
> 	;
> 
> array_declarator
> 	:	ID
> (variable_array_size|fixed_array_size|unknown_array_size)+
> 	;
> 
> unknown_array_size
> 	: '['']'
> 	;
> 
> 
> fixed_array_size
> 	:	'[' positive_int_const ']'
> 	;
> 
> variable_array_size
> 	:	'[' const_exp ']'
> 	;
> 
> attr_decl
> 	:	readonly_attr_spec
> 	|	attr_spec
> 	;
> 
> except_decl
> 	:	'exception' ID '{' member* '}'
> 	;
> 
> op_decl
> 	:	( op_attribute )? op_type_spec '_stdcall'?
> 		ID
> 		parameter_decls
> 		( raises_expr )? ( context_expr )?
> 	;
> 
> op_attribute
> 	:	'oneway'
> 	|	'[' 'callback' ']'
> 	;
> 
> op_type_spec
> 	:	param_type_spec
> 	|	'void'
> 	;
> 
> parameter_decls
> 	:	'(' param_decl ( ',' param_decl )* ')'
> 	|	'(' ')'
> 	;
> 
> param_decl
> 	:	param_attribute  param_type_spec_with_pointers
> 		(simple_declarator|complex_declarator)
> 	;
> 
> param_attribute
> 	:	'in'
> 	|	'out'
> 	|	'inout'
> 	|	'[' ('in'|'out') (',' type_spec)* ']'
> 	|	'[' ('in' ',' 'out') (',' type_spec)* ']'
> 	;
> 
> raises_expr
> 	:	'raises' '(' scoped_name
> 		( ',' scoped_name )* ')'
> 	;
> 
> context_expr
> 	:	'context' '(' STRING_LITERAL
> 		( ',' STRING_LITERAL )* ')'
> 	;
> 
> 
> fixed_pt_type
> 	:	'fixed' '<' positive_int_const ','
> 		positive_int_const '>'
> 	;
> 
> param_type_spec_with_pointers
> 	: param_type_spec '*'*
> 	;
> 
> param_type_spec
> 	:	base_type_spec
> 	|	string_type
> 	|	wide_string_type
> 	|	scoped_name
> 	;
> 
> 
> fixed_pt_const_type
> 	:	'fixed'
> 	;
> 
> value_base_type
> 	:	'ValueBase'
> 	;
> 
> constr_forward_decl
> 	:	'struct' ID
> 	|	'union' ID
> 	;
> 
> import_decl
> 	:	'import' imported_scope ';'
> 	;
> 
> imported_scope
> 	:	scoped_name | STRING_LITERAL
> 	;
> 
> type_id_decl
> 	:	'typeid' scoped_name STRING_LITERAL
> 	;
> 
> type_prefix_decl
> 	:	'typeprefix' scoped_name STRING_LITERAL
> 	;
> 
> readonly_attr_spec
> 	:	'readonly' 'attribute' param_type_spec
> 		readonly_attr_declarator
> 	;
> 
> readonly_attr_declarator
> 	:	simple_declarator raises_expr
> 	|	simple_declarator
> 		( ',' simple_declarator )*
> 	;
> 
> attr_spec
> 	:	'attribute' param_type_spec
> 		attr_declarator
> 	;
> 
> attr_declarator
> 	:	simple_declarator attr_raises_expr
> 	|	simple_declarator
> 		( ',' simple_declarator )*
> 	;
> 
> attr_raises_expr
> 	:	get_excep_expr ( set_excep_expr )?
> 	|	set_excep_expr
> 	;
> 
> get_excep_expr
> 	:	'getraises' exception_list
> 	;
> 
> set_excep_expr
> 	:	'setraises' exception_list
> 	;
> 
> exception_list
> 	:	'(' scoped_name
> 		( ',' scoped_name )* ')'
> 	;
> 
> component
> 	:	component_decl
> 	|	component_forward_decl
> 	;
> 
> component_forward_decl
> 	:	'component' ID
> 	;
> 
> component_decl
> 	:	component_header
> 		'{' component_body '}'
> 	;
> 
> component_header
> 	:	'component' ID
> 		( component_inheritance_spec )?
> 		( supported_interface_spec )?
> 	;
> 
> supported_interface_spec
> 	:	'supports' scoped_name
> 		( ',' scoped_name )*
> 	;
> 
> component_inheritance_spec
> 	:	':' scoped_name
> 	;
> 
> component_body
> 	:	component_export*
> 	;
> 
> component_export
> 	:	provides_decl ';'
> 	|	uses_decl ';'
> 	|	emits_decl ';'
> 	|	publishes_decl ';'
> 	|	consumes_decl ';'
> 	|	attr_decl ';'
> 	;
> 
> provides_decl
> 	:	'provides' interface_type ID
> 	;
> 
> interface_type
> 	:	scoped_name
> 	|	'Object'
> 	;
> 
> uses_decl
> 	:	'uses' ( 'multiple' )?
> 		interface_type ID
> 	;
> 
> emits_decl
> 	:	'emits' scoped_name ID
> 	;
> 
> publishes_decl
> 	:	'publishes' scoped_name ID
> 	;
> 
> consumes_decl
> 	:	'consumes' scoped_name ID
> 	;
> 
> home_decl
> 	:	home_header home_body
> 	;
> 
> home_header
> 	:	'home' ID
> 		( home_inheritance_spec )?
> 		( supported_interface_spec )?
> 		'manages' scoped_name
> 		( primary_key_spec )?
> 	;
> 
> home_inheritance_spec
> 	:	':' scoped_name
> 	;
> 
> primary_key_spec
> 	:	'primarykey' scoped_name
> 	;
> 
> home_body
> 	:	'{' home_export* '}'
> 	;
> 
> home_export
> 	:	export
> 	|	factory_decl ';'
> 	|	finder_decl ';'
> 	;
> 
> factory_decl
> 	:	'factory' ID
> 		'(' ( init_param_decls )? ')'
> 		( raises_expr )?
> 	;
> 
> finder_decl
> 	:	'finder' ID
> 		'(' ( init_param_decls )? ')'
> 		( raises_expr )?
> 	;
> 
> event
> 	:	( event_decl | event_abs_decl |
> 		event_forward_decl)
> 	;
> 
> event_forward_decl
> 	:	( 'abstract' )? 'eventtype' ID
> 	;
> 
> event_abs_decl
> 	:	'abstract' 'eventtype' ID
> 		( value_inheritance_spec )?
> 		'{' export* '}'
> 	;
> 
> event_decl
> 	:	event_header '{' value_element* '}'
> 	;
> 
> event_header
> 	:	( 'custom' )? 'eventtype'
> 		ID ( value_inheritance_spec )?
> 	;
> 
> 
> INTEGER_LITERAL : ('0' | '1'..'9' '0'..'9'*) INTEGER_TYPE_SUFFIX? ;
> 
> OCTAL_LITERAL : '0' ('0'..'7')+ INTEGER_TYPE_SUFFIX? ;
> 
> HEX_LITERAL : '0' ('x'|'X') HEX_DIGIT+ INTEGER_TYPE_SUFFIX? ;
> 
> fragment
> HEX_DIGIT : ( '0'..'9' | 'a'..'f' | 'A'..'F' ) ;
> 
> UUID
> 	:	HEX_DIGIT+ '-' HEX_DIGIT+  '-' HEX_DIGIT+ '-' HEX_DIGIT+ '-
> '
> HEX_DIGIT+ ;
> 
> fragment
> INTEGER_TYPE_SUFFIX : ('l'|'L') ;
> 
> FLOATING_PT_LITERAL
> 	:	('0'..'9')+ '.' ('0'..'9')* EXPONENT? FLOAT_TYPE_SUFFIX?
> 	|	'.' ('0'..'9')+ EXPONENT? FLOAT_TYPE_SUFFIX?
> 	|	('0'..'9')+ EXPONENT? FLOAT_TYPE_SUFFIX?
> 	;
> 
> fragment
> EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;
> 
> fragment
> FLOAT_TYPE_SUFFIX : ('f'|'F'|'d'|'D') ;
> 
> WIDE_CHARACTER_LITERAL
> 	:	'L' CHARACTER_LITERAL
> 	;
> 
> CHARACTER_LITERAL
> 	:	'\'' ( ESCAPE_SEQUENCE | ~('\''|'\\') ) '\''
> 	;
> 
> WIDE_STRING_LITERAL
> 	:	'L' STRING_LITERAL
> 	;
> 
> STRING_LITERAL
> 	:	'"' ( ~('"') )* '"'
> 	;
> 
> BOOLEAN_LITERAL
> 	:	'TRUE'
> 	|	'FALSE'
> 	;
> 
> fragment
> ESCAPE_SEQUENCE
> 	:	'\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
> 	|	UNICODE_ESCAPE
> 	|	OCTAL_ESCAPE
> 	;
> 
> fragment
> OCTAL_ESCAPE
> 	:	'\\' ('0'..'3') ('0'..'7') ('0'..'7')
> 	|	'\\' ('0'..'7') ('0'..'7')
> 	|	'\\' ('0'..'7')
> 	;
> 
> fragment
> UNICODE_ESCAPE
> 	:	'\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
> 	;
> 
> ID
> 	:	LETTER (LETTER|ID_DIGIT)*
> 	;
> 
> fragment
> LETTER
> 	:	'\u0024'
> 	|	'\u0041'..'\u005a'
> 	|	'\u005f'
> 	|	'\u0061'..'\u007a'
> 	|	'\u00c0'..'\u00d6'
> 	|	'\u00d8'..'\u00f6'
> 	|	'\u00f8'..'\u00ff'
> 	|	'\u0100'..'\u1fff'
> 	|	'\u3040'..'\u318f'
> 	|	'\u3300'..'\u337f'
> 	|	'\u3400'..'\u3d2d'
> 	|	'\u4e00'..'\u9fff'
> 	|	'\uf900'..'\ufaff'
> 	;
> 
> fragment
> ID_DIGIT
> 	:	'\u0030'..'\u0039'
> 	|	'\u0660'..'\u0669'
> 	|	'\u06f0'..'\u06f9'
> 	|	'\u0966'..'\u096f'
> 	|	'\u09e6'..'\u09ef'
> 	|	'\u0a66'..'\u0a6f'
> 	|	'\u0ae6'..'\u0aef'
> 	|	'\u0b66'..'\u0b6f'
> 	|	'\u0be7'..'\u0bef'
> 	|	'\u0c66'..'\u0c6f'
> 	|	'\u0ce6'..'\u0cef'
> 	|	'\u0d66'..'\u0d6f'
> 	|	'\u0e50'..'\u0e59'
> 	|	'\u0ed0'..'\u0ed9'
> 	|	'\u1040'..'\u1049'
>    ;
> 
> WS
> 	:	(' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}
> 	;
> 
> COMMENT
> 	:	'/*' ( options {greedy=false;} : . )* '*/'
> {$channel=HIDDEN;}
> 	;
> 
> LINE_COMMENT
> 	:	'//' ~('\n'|'\r')* '\r'? ('\n'|'EOF') {$channel=HIDDEN;}
> 	;
> 
> 
> 
> 
> 
> 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