| /* |
| Copyright 2019 Alain Dargelas |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| parser grammar SV3_1aPpParser; |
| |
| |
| options { tokenVocab = SV3_1aPpLexer; } |
| |
| source_text : ( description ) *; |
| |
| description : |
| unterminated_string |
| | string |
| | number |
| | macro_definition |
| | comments |
| | celldefine_directive_one_line |
| | endcelldefine_directive_one_line |
| | default_nettype_directive_one_line |
| | undef_directive |
| | ifdef_directive |
| | ifndef_directive |
| | else_directive |
| | elsif_directive |
| | elseif_directive |
| | endif_directive |
| | include_directive_one_line |
| | include_directive |
| | resetall_directive_one_line |
| | begin_keywords_directive_one_line |
| | begin_keywords_directive |
| | end_keywords_directive_one_line |
| | timescale_directive_one_line |
| | unconnected_drive_directive_one_line |
| | nounconnected_drive_directive_one_line |
| | line_directive_one_line |
| | default_decay_time_directive_one_line |
| | default_trireg_strenght_directive_one_line |
| | delay_mode_distributed_directive_one_line |
| | delay_mode_path_directive_one_line |
| | delay_mode_unit_directive_one_line |
| | delay_mode_zero_directive_one_line |
| | protect_directive_one_line |
| | endprotect_directive_one_line |
| | protected_directive_one_line |
| | endprotected_directive_one_line |
| | expand_vectornets_directive_one_line |
| | noexpand_vectornets_directive_one_line |
| | autoexpand_vectornets_directive_one_line |
| | remove_gatename_directive_one_line |
| | noremove_gatenames_directive_one_line |
| | remove_netname_directive_one_line |
| | noremove_netnames_directive_one_line |
| | accelerate_directive_one_line |
| | noaccelerate_directive_one_line |
| | undefineall_directive |
| | uselib_directive_one_line |
| | disable_portfaults_directive_one_line |
| | enable_portfaults_directive_one_line |
| | nosuppress_faults_directive_one_line |
| | suppress_faults_directive_one_line |
| | signed_directive_one_line |
| | unsigned_directive_one_line |
| | pragma_directive_one_line |
| | sv_file_directive |
| | sv_line_directive |
| | macro_instance |
| | module |
| | endmodule |
| | sv_interface |
| | endinterface |
| | program |
| | endprogram |
| | primitive |
| | endprimitive |
| | sv_package |
| | endpackage |
| | checker |
| | endchecker |
| | config |
| | endconfig |
| | text_blob |
| | escaped_identifier |
| | pound_delay |
| ; |
| |
| macro_instance : (Macro_identifier | Macro_Escaped_identifier) Spaces* PARENS_OPEN macro_actual_args PARENS_CLOSE # MacroInstanceWithArgs |
| | (Macro_identifier | Macro_Escaped_identifier) # MacroInstanceNoArgs |
| ; |
| |
| unterminated_string : DOUBLE_QUOTE (string_blob)* CR; |
| |
| macro_actual_args : (macro_arg)* (COMMA macro_arg*)* ; |
| |
| comments : One_line_comment |
| | Block_comment |
| ; |
| |
| number : Number ; |
| |
| pound_delay : Pound_delay ; |
| |
| macro_definition : |
| define_directive |
| | multiline_args_macro_definition |
| | simple_no_args_macro_definition |
| | multiline_no_args_macro_definition |
| | simple_args_macro_definition |
| ; |
| |
| include_directive_one_line : include_directive Spaces* CR; |
| include_directive : TICK_INCLUDE Spaces (String | Simple_identifier | Escaped_identifier | macro_instance); |
| |
| line_directive_one_line : line_directive Spaces* CR ; |
| line_directive : TICK_LINE Spaces number String Spaces number; |
| |
| default_nettype_directive_one_line : default_nettype_directive Spaces* CR ; |
| default_nettype_directive : TICK_DEFAULT_NETTYPE Spaces Simple_identifier; |
| |
| sv_file_directive : TICK_FILE__ ; |
| |
| sv_line_directive : TICK_LINE__ ; |
| |
| timescale_directive_one_line : timescale_directive Spaces* CR ; |
| timescale_directive : TICK_TIMESCALE TIMESCALE ; |
| |
| undef_directive : TICK_UNDEF Spaces (Simple_identifier | Escaped_identifier | macro_instance); |
| |
| ifdef_directive : TICK_IFDEF Spaces (Simple_identifier | Escaped_identifier | macro_instance) ; |
| ifdef_directive_in_macro_body : TICK_IFDEF Spaces (identifier_in_macro_body | Escaped_identifier | macro_instance) ; |
| |
| ifndef_directive : TICK_IFNDEF Spaces (Simple_identifier | Escaped_identifier | macro_instance); |
| ifndef_directive_in_macro_body : TICK_IFNDEF Spaces (identifier_in_macro_body | Escaped_identifier | macro_instance); |
| |
| elsif_directive : TICK_ELSIF Spaces (Simple_identifier | Escaped_identifier | macro_instance); |
| elsif_directive_in_macro_body : TICK_ELSIF Spaces (identifier_in_macro_body | Escaped_identifier | macro_instance); |
| |
| elseif_directive : TICK_ELSEIF Spaces (Simple_identifier | Escaped_identifier | macro_instance); |
| elseif_directive_in_macro_body : TICK_ELSEIF Spaces (identifier_in_macro_body | Escaped_identifier | macro_instance); |
| |
| else_directive : TICK_ELSE; |
| |
| endif_directive : TICK_ENDIF Spaces* One_line_comment |
| | TICK_ENDIF ; |
| |
| resetall_directive_one_line : resetall_directive Spaces* CR ; |
| resetall_directive : TICK_RESETALL; |
| |
| begin_keywords_directive_one_line : begin_keywords_directive Spaces* CR ; |
| begin_keywords_directive : TICK_BEGIN_KEYWORDS Spaces String; |
| |
| end_keywords_directive_one_line : end_keywords_directive Spaces* CR ; |
| end_keywords_directive : TICK_END_KEYWORDS; |
| |
| pragma_directive_one_line : pragma_directive Spaces* CR ; |
| pragma_directive : TICK_PRAGMA Spaces Simple_identifier ( pragma_expression ( Special pragma_expression )* )* ; |
| |
| celldefine_directive_one_line : celldefine_directive Spaces* CR ; |
| celldefine_directive : TICK_CELLDEFINE ; |
| |
| endcelldefine_directive_one_line : endcelldefine_directive Spaces* CR ; |
| endcelldefine_directive : TICK_ENDCELLDEFINE; |
| |
| protect_directive_one_line : protect_directive Spaces* CR ; |
| protect_directive : TICK_PROTECT; |
| |
| endprotect_directive_one_line : endprotect_directive Spaces* CR ; |
| endprotect_directive : TICK_ENDPROTECT; |
| |
| protected_directive_one_line : protected_directive Spaces* CR ; |
| protected_directive : TICK_PROTECTED; |
| |
| endprotected_directive_one_line : endprotected_directive Spaces* CR ; |
| endprotected_directive : TICK_ENDPROTECTED; |
| |
| expand_vectornets_directive_one_line : expand_vectornets_directive Spaces* CR ; |
| expand_vectornets_directive : TICK_EXPAND_VECTORNETS ; |
| |
| noexpand_vectornets_directive_one_line : noexpand_vectornets_directive Spaces* CR ; |
| noexpand_vectornets_directive : TICK_NOEXPAND_VECTORNETS; |
| |
| autoexpand_vectornets_directive_one_line : autoexpand_vectornets_directive Spaces* CR ; |
| autoexpand_vectornets_directive : TICK_AUTOEXPAND_VECTORNETS; |
| |
| uselib_directive_one_line : uselib_directive CR ; |
| uselib_directive : TICK_USELIB ( text_blob )+; |
| |
| disable_portfaults_directive_one_line : disable_portfaults_directive Spaces* CR ; |
| disable_portfaults_directive : TICK_DISABLE_PORTFAULTS; |
| |
| enable_portfaults_directive_one_line : enable_portfaults_directive Spaces* CR ; |
| enable_portfaults_directive : TICK_ENABLE_PORTFAULTS; |
| |
| nosuppress_faults_directive_one_line : nosuppress_faults_directive Spaces* CR ; |
| nosuppress_faults_directive : TICK_NOSUPPRESS_FAULTS; |
| |
| suppress_faults_directive_one_line : suppress_faults_directive Spaces* CR ; |
| suppress_faults_directive : TICK_SUPPRESS_FAULTS; |
| |
| signed_directive_one_line : signed_directive Spaces* CR ; |
| signed_directive : TICK_SIGNED; |
| |
| unsigned_directive_one_line : unsigned_directive Spaces* CR ; |
| unsigned_directive : TICK_UNSIGNED; |
| |
| remove_gatename_directive_one_line : remove_gatename_directive Spaces* CR ; |
| remove_gatename_directive : TICK_REMOVE_GATENAME; |
| |
| noremove_gatenames_directive_one_line : noremove_gatenames_directive Spaces* CR ; |
| noremove_gatenames_directive : TICK_NOREMOVE_GATENAMES; |
| |
| remove_netname_directive_one_line : remove_netname_directive Spaces* CR ; |
| remove_netname_directive : TICK_REMOVE_NETNAME; |
| |
| noremove_netnames_directive_one_line : noremove_netnames_directive Spaces* CR ; |
| noremove_netnames_directive : TICK_NOREMOVE_NETNAMES; |
| |
| accelerate_directive_one_line : accelerate_directive Spaces* CR ; |
| accelerate_directive : TICK_ACCELERATE; |
| |
| noaccelerate_directive_one_line : noaccelerate_directive Spaces* CR ; |
| noaccelerate_directive : TICK_NOACCELERATE; |
| |
| default_trireg_strenght_directive_one_line : default_trireg_strenght_directive Spaces* CR ; |
| default_trireg_strenght_directive : TICK_DEFAULT_TRIREG_STRENGTH Spaces number; |
| |
| default_decay_time_directive_one_line : default_decay_time_directive Spaces* CR ; |
| default_decay_time_directive : TICK_DEFAULT_DECAY_TIME Spaces ( number | Simple_identifier | Fixed_point_number ); |
| |
| unconnected_drive_directive_one_line : unconnected_drive_directive Spaces* CR ; |
| unconnected_drive_directive : TICK_UNCONNECTED_DRIVE Spaces Simple_identifier; |
| |
| nounconnected_drive_directive_one_line : nounconnected_drive_directive Spaces* CR ; |
| nounconnected_drive_directive : TICK_NOUNCONNECTED_DRIVE; |
| |
| delay_mode_distributed_directive_one_line : delay_mode_distributed_directive Spaces* CR ; |
| delay_mode_distributed_directive : TICK_DELAY_MODE_DISTRIBUTED; |
| |
| delay_mode_path_directive_one_line : delay_mode_path_directive Spaces* CR ; |
| delay_mode_path_directive : TICK_DELAY_MODE_PATH; |
| |
| delay_mode_unit_directive_one_line : delay_mode_unit_directive Spaces* CR ; |
| delay_mode_unit_directive : TICK_DELAY_MODE_UNIT; |
| |
| delay_mode_zero_directive_one_line : delay_mode_zero_directive Spaces* CR ; |
| delay_mode_zero_directive : TICK_DELAY_MODE_ZERO; |
| |
| undefineall_directive : TICK_UNDEFINEALL; |
| |
| module : MODULE ; |
| endmodule : ENDMODULE ; |
| |
| sv_interface : INTERFACE ; |
| endinterface : ENDINTERFACE ; |
| |
| program : PROGRAM ; |
| endprogram : ENDPROGRAM ; |
| |
| primitive : PRIMITIVE ; |
| endprimitive : ENDPRIMITIVE ; |
| |
| sv_package : PACKAGE ; |
| endpackage : ENDPACKAGE ; |
| |
| checker : CHECKER ; |
| endchecker : ENDCHECKER ; |
| |
| config : CONFIG ; |
| endconfig : ENDCONFIG ; |
| |
| define_directive : TICK_DEFINE Spaces (Simple_identifier | Escaped_identifier) Spaces* CR ; |
| |
| multiline_no_args_macro_definition : TICK_DEFINE Spaces (Simple_identifier | Escaped_identifier) Spaces* escaped_macro_definition_body ; |
| |
| multiline_args_macro_definition : TICK_DEFINE Spaces (Simple_identifier | Escaped_identifier) macro_arguments Spaces* escaped_macro_definition_body; |
| |
| simple_no_args_macro_definition : |
| TICK_DEFINE Spaces (Simple_identifier | Escaped_identifier) Spaces simple_macro_definition_body (CR | One_line_comment) |
| | TICK_DEFINE Spaces (Simple_identifier | Escaped_identifier) Spaces* CR |
| ; |
| |
| simple_args_macro_definition : |
| TICK_DEFINE Spaces (Simple_identifier | Escaped_identifier) macro_arguments Spaces simple_macro_definition_body (CR | One_line_comment) |
| | TICK_DEFINE Spaces (Simple_identifier | Escaped_identifier) macro_arguments Spaces* CR |
| ; |
| |
| identifier_in_macro_body : (Simple_identifier TICK_TICK?)* ; |
| |
| simple_no_args_macro_definition_in_macro_body : |
| TICK_DEFINE Spaces (identifier_in_macro_body | Escaped_identifier) Spaces simple_macro_definition_body_in_macro_body |
| | TICK_DEFINE Spaces (identifier_in_macro_body | Escaped_identifier) Spaces* |
| | TICK_DEFINE Spaces (identifier_in_macro_body | Escaped_identifier) TICK_VARIABLE simple_macro_definition_body_in_macro_body |
| ; |
| |
| simple_args_macro_definition_in_macro_body : |
| TICK_DEFINE Spaces (identifier_in_macro_body | Escaped_identifier) macro_arguments Spaces simple_macro_definition_body_in_macro_body |
| | TICK_DEFINE Spaces (identifier_in_macro_body | Escaped_identifier) macro_arguments |
| ; |
| |
| directive_in_macro : |
| celldefine_directive |
| | endcelldefine_directive |
| | default_nettype_directive |
| | undef_directive |
| | ifdef_directive |
| | ifndef_directive |
| | else_directive |
| | elsif_directive |
| | elseif_directive |
| | endif_directive |
| | include_directive |
| | resetall_directive |
| | timescale_directive |
| | unconnected_drive_directive |
| | nounconnected_drive_directive |
| | line_directive |
| | default_decay_time_directive |
| | default_trireg_strenght_directive |
| | delay_mode_distributed_directive |
| | delay_mode_path_directive |
| | delay_mode_unit_directive |
| | delay_mode_zero_directive |
| | protect_directive |
| | endprotect_directive |
| | protected_directive |
| | endprotected_directive |
| | expand_vectornets_directive |
| | noexpand_vectornets_directive |
| | autoexpand_vectornets_directive |
| | remove_gatename_directive |
| | noremove_gatenames_directive |
| | remove_netname_directive |
| | noremove_netnames_directive |
| | accelerate_directive |
| | noaccelerate_directive |
| | undefineall_directive |
| | uselib_directive |
| | disable_portfaults_directive |
| | enable_portfaults_directive |
| | nosuppress_faults_directive |
| | suppress_faults_directive |
| | signed_directive |
| | unsigned_directive |
| | sv_file_directive |
| | sv_line_directive |
| | sv_package |
| | endpackage |
| | module |
| | endmodule |
| | sv_interface |
| | endinterface |
| | program |
| | endprogram |
| | primitive |
| | endprimitive |
| | checker |
| | endchecker |
| | config |
| | endconfig |
| | simple_args_macro_definition_in_macro_body //(ESCAPED_CR | CR) Adds long runtime on Verilator t_preproc.v case but fixes Syntax Error |
| | simple_no_args_macro_definition_in_macro_body //(ESCAPED_CR | CR) |
| | pound_delay |
| ; |
| |
| macro_arguments : PARENS_OPEN ((Simple_identifier Spaces* (EQUAL_OP default_value*)*) |
| (COMMA Spaces* (Simple_identifier Spaces* (EQUAL_OP default_value*)*))*)* PARENS_CLOSE ; |
| |
| escaped_macro_definition_body : escaped_macro_definition_body_alt1 |
| | escaped_macro_definition_body_alt2; |
| |
| escaped_macro_definition_body_alt1 : ( unterminated_string | Macro_identifier | Macro_Escaped_identifier | |
| escaped_identifier | Simple_identifier | |
| number | TEXT_CR | pound_delay | ESCAPED_CR | PARENS_OPEN | PARENS_CLOSE | COMMA | |
| EQUAL_OP | DOUBLE_QUOTE | TICK_VARIABLE | directive_in_macro | Spaces | |
| Fixed_point_number | String | comments | TICK_QUOTE | TICK_BACKSLASH_TICK_QUOTE | |
| TICK_TICK | Special | CURLY_OPEN | CURLY_CLOSE | SQUARE_OPEN | |
| SQUARE_CLOSE)*? ESCAPED_CR Spaces* (CR | EOF); |
| |
| escaped_macro_definition_body_alt2 : ( unterminated_string | Macro_identifier | Macro_Escaped_identifier | |
| escaped_identifier | |
| Simple_identifier | number | TEXT_CR | pound_delay | ESCAPED_CR | PARENS_OPEN | |
| PARENS_CLOSE | COMMA | EQUAL_OP | DOUBLE_QUOTE | TICK_VARIABLE | |
| directive_in_macro | Spaces | Fixed_point_number | String | comments | |
| TICK_QUOTE | TICK_BACKSLASH_TICK_QUOTE | TICK_TICK | Special | CURLY_OPEN | |
| CURLY_CLOSE | SQUARE_OPEN | SQUARE_CLOSE)*? (CR Spaces* | EOF) ; |
| |
| simple_macro_definition_body : ( unterminated_string | Macro_identifier | Macro_Escaped_identifier | |
| escaped_identifier | |
| Simple_identifier | number | pound_delay | TEXT_CR | PARENS_OPEN | |
| PARENS_CLOSE | COMMA | EQUAL_OP | DOUBLE_QUOTE | TICK_VARIABLE | |
| Spaces | Fixed_point_number | String | comments | |
| TICK_QUOTE | TICK_BACKSLASH_TICK_QUOTE | TICK_TICK | Special | |
| CURLY_OPEN | CURLY_CLOSE | SQUARE_OPEN | SQUARE_CLOSE | TICK_INCLUDE | directive_in_macro )*? ; |
| |
| simple_macro_definition_body_in_macro_body : ( unterminated_string | Macro_identifier | Macro_Escaped_identifier | |
| escaped_identifier | |
| Simple_identifier | number | pound_delay | TEXT_CR | |
| PARENS_OPEN | PARENS_CLOSE | COMMA | EQUAL_OP | DOUBLE_QUOTE | TICK_VARIABLE | |
| Spaces | Fixed_point_number | String | comments | |
| TICK_QUOTE | TICK_BACKSLASH_TICK_QUOTE | TICK_TICK | Special | CURLY_OPEN | |
| CURLY_CLOSE | SQUARE_OPEN | SQUARE_CLOSE )*? ; |
| |
| |
| pragma_expression : Simple_identifier |
| | number |
| | Spaces |
| | Fixed_point_number |
| | String |
| | Special |
| | CURLY_OPEN |
| | CURLY_CLOSE |
| | SQUARE_OPEN |
| | SQUARE_CLOSE |
| | PARENS_OPEN |
| | PARENS_CLOSE |
| | COMMA |
| | EQUAL_OP |
| | DOUBLE_QUOTE |
| | ANY |
| | escaped_identifier |
| | pound_delay |
| ; |
| |
| macro_arg : Simple_identifier |
| | number |
| | Spaces |
| | Fixed_point_number |
| | String |
| | Special |
| | paired_parens |
| | EQUAL_OP |
| | DOUBLE_QUOTE |
| | macro_instance |
| | CR |
| | TEXT_CR |
| | ANY |
| | escaped_identifier |
| | simple_args_macro_definition_in_macro_body |
| | simple_no_args_macro_definition_in_macro_body |
| | comments |
| ; |
| |
| paired_parens : ( PARENS_OPEN ( Simple_identifier | number |
| | Spaces | Fixed_point_number | String | Special | COMMA | EQUAL_OP |
| | DOUBLE_QUOTE | macro_instance | TEXT_CR | CR | ANY | paired_parens | escaped_identifier | comments )* PARENS_CLOSE ) |
| | ( CURLY_OPEN ( Simple_identifier | number |
| | Spaces | Fixed_point_number | String | Special | COMMA | EQUAL_OP |
| | DOUBLE_QUOTE | macro_instance | CR | ANY | paired_parens | escaped_identifier | comments )* CURLY_CLOSE ) |
| | ( SQUARE_OPEN ( Simple_identifier | number |
| | Spaces | Fixed_point_number | String | Special | COMMA | EQUAL_OP |
| | DOUBLE_QUOTE | macro_instance | CR | ANY | paired_parens | escaped_identifier | comments )* SQUARE_CLOSE ) ; |
| |
| text_blob : Simple_identifier |
| | number |
| | CR |
| | Spaces |
| | Fixed_point_number |
| | ESCAPED_CR |
| | String |
| | PARENS_OPEN |
| | PARENS_CLOSE |
| | COMMA |
| | EQUAL_OP |
| | DOUBLE_QUOTE |
| | Special |
| | CURLY_OPEN |
| | CURLY_CLOSE |
| | SQUARE_OPEN |
| | SQUARE_CLOSE |
| | TICK_TICK |
| | TICK_VARIABLE |
| | TIMESCALE |
| | ANY |
| | pound_delay |
| | TICK_QUOTE |
| | TICK_BACKSLASH_TICK_QUOTE |
| | TEXT_CR |
| ; |
| |
| string : String ; |
| |
| escaped_identifier : Escaped_identifier; |
| |
| default_value : Simple_identifier |
| | number |
| | Spaces |
| | Fixed_point_number |
| | String |
| | Special |
| | CURLY_OPEN |
| | CURLY_CLOSE |
| | SQUARE_OPEN |
| | SQUARE_CLOSE |
| | ANY |
| | escaped_identifier |
| | macro_instance |
| ; |
| |
| string_blob : Simple_identifier |
| | number |
| | Spaces |
| | Fixed_point_number |
| | ESCAPED_CR |
| | PARENS_OPEN |
| | PARENS_CLOSE |
| | COMMA |
| | EQUAL_OP |
| | DOUBLE_QUOTE |
| | Special |
| | CURLY_OPEN |
| | CURLY_CLOSE |
| | SQUARE_OPEN |
| | SQUARE_CLOSE |
| | ANY |
| | escaped_identifier |
| | TIMESCALE |
| | pound_delay |
| | TEXT_CR |
| ; |