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: [email protected] [mailto:antlr-interest-
> [email protected]] On Behalf Of Andrey Pohilko
> Sent: Wednesday, December 16, 2009 4:05 AM
> To: [email protected]
> 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




List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe: 
http://www.antlr.org/mailman/options/antlr-interest/your-email-address

--

You received this message because you are subscribed to the Google Groups 
"il-antlr-interest" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en.


Reply via email to