Closed sharwell closed 10 years ago
When the following grammar is opened, the navigator window fails to display lexer rules.
grammar Ns3mod; dialog_source : DIALOG_SOURCE_DEFINITION dialog_info dialog_data? dialog_subroutine* ; dialog_info: DEFINE_DIALOG_INFO (FULL_COMMENT1|FULL_COMMENT2)* EMPTY_DIALOG_COMMENT? END_DIALOG_INFO; statement_list: statement*; dialog_data: dialog_data_params DEFINE_LOCAL_DATA LOCAL_DATA dialog_data_handles dialog_data_using END_LOCAL_DATA? END_DEFINE?; dialog_data_params: DEFINE_DATA DEFINE_DIALOG_PARAMETERS PARAMETER_BEGIN PARAM_GUI_HANDLE+ statement_list DEFINE_USING_BEGIN DEFINE_USING_END END_DIALOG_PARAMETERS; dialog_data_handles: DEFINE_HANDLES_BEGIN HANDLE_DEFINITION* DEFINE_HANDLES_END; dialog_data_using: statement_list DEFINE_USING_BEGIN LOCAL_USING+ DEFINE_USING_END; dialog_subroutine : dialog_subroutine_control | dialog_subroutine_elements | dialog_subroutine_event ; dialog_subroutine_control : DEFINE_SUBROUTINE_CONTROL process_gui_action_add END_SUBROUTINE_CONTROL; dialog_subroutine_elements : DEFINE_SUBROUTINE_DIALOG_ELEMENTS define_control* END_SUBROUTINE_DIALOG_ELEMENTS; dialog_subroutine_event : DEFINE_SUBROUTINE_EVENT_DEFAULT option* END_SUBROUTINE_EVENT_DEFAULT event* statement_list; process_gui_action_add: PROCESS_GUI_ACTION_ADD PARAMETERS_BEGIN parameter_definition (PARAMETERS_END|PARAMETERS_END_GIVING_ERROR); parameter_definition : PARAM_ASSIGNMENT*; statement : EMPTY_USER_CODE_SECTION | PERFORM_STATEMENT | PROCESS_GUI_ACTION_AFTER_CREATION | PROCESS_GUI_ACTION_AFTER_CREATION_GIVING_ERROR | PROCESS_GUI_ACTION_RESET_ATTRIBUTES | PROCESS_GUI_ACTION_RESET_ATTRIBUTES_GIVING_ERROR | decide_statement; define_control : DEFINE_CONTROL process_gui_action_add END_CONTROL; option : OPTION_SPEC statement_list; event : DEFINE_EVENT option* END_EVENT; decide_statement : DECIDE_ON_FIRST (DEFINE_EVENTS_FOR|DEFINE_EVENT)? value*; value : VALUE option* statement_list; // Lexer rules DECIDE_ON_FIRST: INT WS* 'DECIDE' WS+ 'ON' WS+ 'FIRST' WS+ VARNAME (WS+ CI0 WS+ 'DEFINE' WS+ 'ALL' WS+ 'EVENTS')? NL; DEFINE_CONTROL: INT WS* CI1 WS+ 'DEFINE' WS+ 'CONTROL' WS+ VARNAME NL; DEFINE_DATA: INT WS* 'DEFINE' WS+ 'DATA' NL; DEFINE_EVENT: INT WS* CI1 WS+ 'DEFINE' WS+ 'EVENT' WS+ VARNAME NL; DEFINE_EVENTS_FOR: INT WS* CI1 WS+ 'DEFINE' WS+ 'EVENTS' WS+ 'FOR' WS+ 'DIALOG' NL; DEFINE_DIALOG_INFO: INT WS* CI1 WS+ 'DEFINE' WS+ 'DIALOG' WS+ 'INFO' NL; DEFINE_DIALOG_PARAMETERS :INT WS* CI1 WS+ 'DEFINE' WS+ 'DIALOG' WS+ 'PARAMETERS' NL; DEFINE_LOCAL_DATA: INT WS* CI1 WS+ 'DEFINE' WS+ 'LOCAL' WS+ 'DATA' NL; DEFINE_HANDLES_BEGIN: INT WS* CI1 WS+ 'DEFINE' WS+ 'HANDLES' NL; DEFINE_HANDLES_END: INT WS* CI4 WS+ 'END-HANDLES' NL; DEFINE_SUBROUTINE: INT WS* 'DEFINE' WS+ 'SUBROUTINE' WS+ VARNAME NL; DEFINE_SUBROUTINE_CONTROL :INT WS* 'DEFINE' WS+ 'SUBROUTINE' WS+ VARNAME WS+ CI0 WS+ 'DEFINE' WS+ 'CONTROL' WS+ VARNAME NL; DEFINE_SUBROUTINE_DIALOG_ELEMENTS :INT WS* 'DEFINE' WS+ 'SUBROUTINE' WS+ VARNAME WS+ CI0 WS+ 'DEFINE' WS+ 'DIALOG' WS+ 'ELEMENTS' NL; DEFINE_SUBROUTINE_EVENT_DEFAULT :INT WS* 'DEFINE' WS+ 'SUBROUTINE' WS+ VARNAME WS+ CI0 WS+ 'DEFINE' WS+ 'EVENT' WS+ 'DEFAULT' NL; DEFINE_USING_BEGIN: INT WS* CI1 WS+ 'DEFINE' WS+ 'USING' NL; DEFINE_USING_END: INT WS* CI4 WS+ 'END-USING' NL; DIALOG_SOURCE_DEFINITION: INT WS* CI0 WS+ 'DIALOG' WS+ 'SOURCE' WS+ '22D' NL; EMPTY_DIALOG_COMMENT: INT WS* CI0 WS+ 'EMPTY' WS+ 'DIALOG' WS+ 'COMMENT' NL; EMPTY_USER_CODE_SECTION: INT WS* (';')? CI0 WS+ 'EMPTY' WS+ 'USER' WS+ 'CODE' WS+ 'SECTION' NL; END_CONTROL: INT WS* CI4 WS+ 'END-CONTROL' NL; END_DEFINE: INT WS* 'END-DEFINE' NL; END_DIALOG_INFO: INT WS* CI4 WS+ 'END-DIALOG-INFO' NL; END_DIALOG_PARAMETERS: INT WS* CI4 WS+ 'END-DIALOG-PARAMETERS' NL; END_EVENT: INT WS* CI4 WS+ 'END-EVENT' NL; END_LOCAL_DATA: INT WS* CI4 WS+ 'END-LOCAL-DATA' NL; END_SUBROUTINE: INT WS* 'END-SUBROUTINE' NL; END_SUBROUTINE_CONTROL: INT WS* 'END-SUBROUTINE' WS+ CI0 WS+ 'END-CONTROL' NL; END_SUBROUTINE_DIALOG_ELEMENTS: INT WS* 'END-SUBROUTINE' WS+ CI0 WS+ 'END-DIALOG-ELEMENTS' NL; END_SUBROUTINE_EVENT_DEFAULT: INT WS* 'END-SUBROUTINE' WS+ CI0 WS+ 'END-EVENT' NL; FULL_COMMENT1: INT CI2 ~[\r\n]* NL; FULL_COMMENT2: INT CI0 ~[\r\n]* NL; HANDLE_DEFINITION: INT WS* INT WS+ VARNAME WS+ 'HANDLE' WS+ 'OF' WS+ HANDLE_TYPE NL; LOCAL_DATA: INT WS* 'LOCAL' NL; LOCAL_USING: INT WS* 'LOCAL' WS+ 'USING' WS+ VARNAME NL; OPTION_SPEC: INT WS* 'OPTIONS' WS+ INT (WS+ ('DEFAULT'|VARNAME))? NL; PARAM_ASSIGNMENT: INT WS* VARNAME WS+ '=' WS+ '*'? PARAM_VALUE NL; PARAMETER_BEGIN: INT WS* 'PARAMETER' NL; PARAMETERS_BEGIN: INT WS* 'PARAMETERS' NL; PARAMETERS_END: INT WS* 'END-PARAMETERS' NL; PARAMETERS_END_GIVING_ERROR: INT WS* 'END-PARAMETERS' WS+ 'GIVING' WS+ '*ERROR' NL; PERFORM_STATEMENT: INT WS* 'PERFORM' WS+ VARNAME NL; PARAM_GUI_HANDLE: INT WS+ INT WS+ VARNAME WS+ 'HANDLE' WS+ 'OF' WS+ 'GUI' WS+ 'BY' WS+ 'VALUE' NL; PROCESS_GUI_ACTION_ADD: INT WS* 'PROCESS' WS+ 'GUI' WS+ 'ACTION' WS+ 'ADD' WS+ 'WITH' NL; PROCESS_GUI_ACTION_AFTER_CREATION: INT WS* 'PROCESS' WS+ 'GUI' WS+ 'ACTION' WS+ 'AFTER-CREATION' WS+ 'WITH' VARNAME NL; PROCESS_GUI_ACTION_AFTER_CREATION_GIVING_ERROR: INT WS* 'PROCESS' WS+ 'GUI' WS+ 'ACTION' WS+ 'AFTER-CREATION' WS+ 'WITH' VARNAME WS+ 'GIVING' WS+ '*ERROR' NL; PROCESS_GUI_ACTION_RESET_ATTRIBUTES: INT WS* 'PROCESS' WS+ 'GUI' WS+ 'ACTION' WS+ 'RESET-ATTRIBUTES' WS+ NL; PROCESS_GUI_ACTION_RESET_ATTRIBUTES_GIVING_ERROR: INT WS* 'PROCESS' WS+ 'GUI' WS+ 'ACTION' WS+ 'RESET-ATTRIBUTES' WS+ 'GIVING' WS+ '*ERROR' NL; VALUE: INT WS* 'VALUE' WS+ (STRING|'NULL-HANDLE') NL; // Comment introducers CI0: '/**'; CI1: '/*['; CI2: '**D*'; CI3: '/**'; CI4: '/*]'; VARNAME: [#\*A-Za-z]+[a-zA-Z0-9\-$]*; HANDLE_TYPE: 'WINDOW'|'INPUTFIELD'|'LISTBOX'|'PUSHBUTTON'|'BITMAP'|'LISTBOX' |'RADIOBUTTON'|'TEXTCONSTANT'|'TOGGLEBUTTON'|'SELECTIONBOX'; PARAM_VALUE: INT|BOOL|STRING|VARNAME; // Line formatting stuff INT: [0-9]+; STRING: [\']~[\']*[\']; BOOL: ('FALSE'|'TRUE'); NL: WS* [\r]? [\n]; // White space handling WS: [ \t\f] -> skip;
When the following grammar is opened, the navigator window fails to display lexer rules.