tunnelvisionlabs / antlrworks2

Tunnel Vision Labs' ANTLRWorks 2 IDE
http://tunnelvisionlabs.com/products/antlrworks
Other
48 stars 21 forks source link

Navigator window failed to display lexer rules #28

Closed sharwell closed 10 years ago

sharwell commented 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;