/**

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.

*/

// A SystemVerilog 2017 Preprocessor Lexer Antlr4 grammar

lexer grammar SV3_1aPpLexer;

// A.9.2 Comments

One_line_comment : '//' Comment_text '\r'? '\n' ;

Block_comment : '/*' Comment_text '*/' ;

fragment Comment_text : (WS | CR | TAB)* | .*? ;

TICK_VARIABLE : '``' [a-zA-Z0-9_]+ '``' ;

TICK_DEFINE : '`define' ;
              
TICK_CELLDEFINE : '`celldefine' ;

TICK_ENDCELLDEFINE : '`endcelldefine' ;

TICK_DEFAULT_NETTYPE : '`default_nettype' ;

TICK_UNDEF : '`undef' ;

TICK_IFDEF : '`ifdef' ;

TICK_IFNDEF : '`ifndef' ;

TICK_ELSE : '`else' ;

TICK_ELSIF : '`elsif' ;

TICK_ELSEIF : '`elseif' ;

TICK_ENDIF : '`endif' ;

TICK_INCLUDE : '`include' ;

TICK_PRAGMA : '`pragma' ;

TICK_BEGIN_KEYWORDS : '`begin_keywords' ; 

TICK_END_KEYWORDS : '`end_keywords' ;

TICK_RESETALL : '`resetall' ;

TICK_TIMESCALE : '`timescale' ;

TICK_UNCONNECTED_DRIVE : '`unconnected_drive' ;

TICK_NOUNCONNECTED_DRIVE : '`nounconnected_drive' ; 
            
TICK_LINE : '`line' ; 
 
TICK_DEFAULT_DECAY_TIME : '`default_decay_time' ;
       
TICK_DEFAULT_TRIREG_STRENGTH : '`default_trireg_strength' ;

TICK_DELAY_MODE_DISTRIBUTED : '`delay_mode_distributed' ;   
  
TICK_DELAY_MODE_PATH : '`delay_mode_path' ;          
  
TICK_DELAY_MODE_UNIT : '`delay_mode_unit' ;           
 
TICK_DELAY_MODE_ZERO : '`delay_mode_zero' ;

TICK_UNDEFINEALL : '`undefineall' ;

TICK_ACCELERATE : '`accelerate';

TICK_NOACCELERATE : '`noaccelerate';

TICK_PROTECT : '`protect' ;

TICK_USELIB : '`uselib' ;

TICK_DISABLE_PORTFAULTS : '`disable_portfaults' ;

TICK_ENABLE_PORTFAULTS : '`enable_portfaults' ;

TICK_NOSUPPRESS_FAULTS : '`nosuppress_faults' ;

TICK_SUPPRESS_FAULTS : '`suppress_faults' ;

TICK_SIGNED : '`signed' ;

TICK_UNSIGNED : '`unsigned' ; 

TICK_ENDPROTECT : '`endprotect' ; 

TICK_PROTECTED : '`protected' ;

TICK_ENDPROTECTED : '`endprotected' ; 

TICK_EXPAND_VECTORNETS : '`expand_vectornets' ;

TICK_NOEXPAND_VECTORNETS : '`noexpand_vectornets' ;

TICK_AUTOEXPAND_VECTORNETS : '`autoexpand_vectornets' ;

TICK_REMOVE_GATENAME : '`remove_gatename' ;

TICK_NOREMOVE_GATENAMES : '`noremove_gatenames' ;

TICK_REMOVE_NETNAME : '`remove_netname' ;

TICK_NOREMOVE_NETNAMES : '`noremove_netnames' ; 

TICK_FILE__ : '`__FILE__' ;   

TICK_LINE__ : '`__LINE__' ;

MODULE : 'module';

ENDMODULE : 'endmodule' ;

INTERFACE : 'interface' ;

ENDINTERFACE : 'endinterface' ;

PROGRAM : 'program' ;

ENDPROGRAM : 'endprogram' ;

PRIMITIVE : 'primivite' ;

ENDPRIMITIVE : 'endprimitive' ;

PACKAGE : 'package' ;

ENDPACKAGE : 'endpackage' ;

CHECKER : 'checker' ;

ENDCHECKER : 'endchecker' ;

CONFIG : 'config' ;

ENDCONFIG : 'endconfig' ;

Macro_identifier : '`' [a-zA-Z_] [a-zA-Z0-9_$]* ;

Macro_Escaped_identifier
    :	'`\\' ~[WS\r\t\n]*? WS
    ;

String
 : '"'                          // a opening quote
   (                            // start group
     '\\' ~('\r')        // an escaped char other than a line break char
     |                          // OR
     ~('\\' | '"'| '\r' | '\n') // any char other than '"', '\' and line breaks
   )*                           // end group and repeat zero or more times
   '"'                          // the closing quote
 ;

Simple_identifier : [a-zA-Z_] [a-zA-Z0-9_$]* ;

Spaces : (WS | TAB)+;

Pound_delay : '#' WS* [0-9] [0-9_.]*;

TIMESCALE : (WS | TAB)* [0-9]+ (WS | TAB)* ('ms' | 'us' | 'ns' | 'ps'  | 'fs' | 's' ) (WS | TAB)* '/' (WS | TAB)* [0-9]+ (WS | TAB)* ('ms' | 'us' | 'ns' | 'ps'  | 'fs' | 's')  ;

fragment
Non_zero_unsigned_number : '1'..'9' ( '_' | Decimal_digit )* ;

fragment
Decimal_number
    : Unsigned_number
    | ( Non_zero_unsigned_number WS* )? Decimal_base WS* Unsigned_number*
    | ( Non_zero_unsigned_number WS* )? Decimal_base WS* X_digit ( '_' )*
    | ( Non_zero_unsigned_number WS* )? Decimal_base WS* Z_digit ( '_' )*
    ;

/* binary_number ::= [ size ] binary_base binary_value */

fragment
Binary_number : ( Non_zero_unsigned_number WS* )? Binary_base WS* Binary_value ;

/* octal_number ::= [ size ] octal_base octal_value */

fragment
Octal_number : ( Non_zero_unsigned_number WS* )? Octal_base WS* Octal_value ;

/* hex_number ::= [ size ] hex_base hex_value */

fragment
Hex_number : ( Non_zero_unsigned_number WS* )? Hex_base WS* Hex_value ;

Number  
    :   Decimal_number 
    |   Octal_number   
    |   Binary_number  
    |   Hex_number     
    ;

/* unsigned_number <<1>> ::= decimal_digit { _ | decimal_digit } */

fragment
Unsigned_number : Decimal_digit ( '_' | Decimal_digit | ' ' )* ;

/* binary_value <<1>> ::= binary_digit { _ | binary_digit } */

fragment
Binary_value : ('_')* Binary_digit* ( ' ' | '_' | Binary_digit_no_qm )*;

/* octal_value <<1>> ::= octal_digit { _ | octal_digit } */

fragment
Octal_value : ('_')* Octal_digit* ( ' ' | '_' | Octal_digit_no_qm )*;

/* hex_value <<1>> ::= hex_digit { _ | hex_digit } */

fragment
Hex_value : ('_')* Hex_digit* ( ' ' | '_' | Hex_digit_no_qm )*;

/* decimal_base <<1>> ::= [s|S]d | [s|S]D */

fragment
Decimal_base : '\'' ('s' | 'S')? ('d' | 'D') ;

/* binary_base <<1>> ::= [s|S]b | [s|S]B */

fragment
Binary_base : '\'' ('s' | 'S')? ('b' | 'B') ;

/* octal_base <<1>> ::= [s|S]o | [s|S]O */

fragment
Octal_base : '\'' ('s' | 'S')? ( 'o' | 'O') ;

/* hex_base <<1>> ::ps [s|S]h | [s|S]H */

fragment
Hex_base : '\'' ('s' | 'S')?  ('h' | 'H') ;


/* decimal_digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 */

fragment
Decimal_digit : '0'..'9' ;

/* binary_digit ::= x_digit | z_digit | 0 | 1 */

fragment
Binary_digit : X_digit | Z_digit | ('0' | '1') ;

fragment
Binary_digit_no_qm : X_digit | Z_digit_no_qm | ('0' | '1') ;

/* octal_digit ::= x_digit | z_digit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 */

fragment
Octal_digit : X_digit | Z_digit | '0'..'7' ;

fragment
Octal_digit_no_qm : X_digit | Z_digit_no_qm | '0'..'7' ;

/* hex_digit ::= x_digit | z_digit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f | A | B | C | D | E | F */

fragment
Hex_digit : X_digit | Z_digit | ('0'..'9' | 'a'..'f' | 'A'..'F') ;

fragment
Hex_digit_no_qm : X_digit | Z_digit_no_qm | ('0'..'9' | 'a'..'f' | 'A'..'F') ;

/* x_digit ::= x | X */

fragment
X_digit : ('x'| 'X') ;

/* z_digit ::= z | Z | ? */

fragment
Z_digit : ('z'| 'Z' | '?')  ;

fragment
Z_digit_no_qm : ('z'| 'Z')  ;

Fixed_point_number : [0-9]+ '.' [0-9]+ ;

fragment WS : [ ]+ ;

fragment TAB : [\t]+ ;

TEXT_CR : '\\' [nr];

ESCAPED_CR : '\\' [\r\n] ; 

CR : [\r\n] ;

TICK_QUOTE : '`"' ;

TICK_BACKSLASH_TICK_QUOTE : '`\\`"' ;

TICK_TICK: '``' ; 

PARENS_OPEN : '(' ;

PARENS_CLOSE : ')' ;

COMMA : ',' ;

EQUAL_OP : '=' ;

DOUBLE_QUOTE : '"';

Escaped_identifier
    :	'\\' ~[WS\r\t\n]*? WS
    ;

CURLY_OPEN : '{' ;
CURLY_CLOSE : '}' ;
SQUARE_OPEN : '[' ;
SQUARE_CLOSE : ']' ;

Special : [~!@#$%^&*+|:;'<>.?/-]+ ;

ANY : .;
