All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.protostuff.compiler.parser.ProtoLexer.g4 Maven / Gradle / Ivy

The newest version!
lexer grammar ProtoLexer;

PACKAGE
    : 'package'
    ;
SYNTAX
    : 'syntax'
    ;
IMPORT
    : 'import'
    ;
PUBLIC
    : 'public'
    ;
OPTION
    : 'option'
    ;
MESSAGE
    : 'message'
    ;
GROUP
    : 'group'
    ;
OPTIONAL
    : 'optional'
    ;
REQUIRED
    : 'required'
    ;
REPEATED
    : 'repeated'
    ;
ONEOF
    : 'oneof'
    ;
EXTEND
    : 'extend'
    ;
EXTENSIONS
    : 'extensions'
    ;
TO
    : 'to'
    ;
MAX
    : 'max'
    ;
RESERVED
    : 'reserved'
    ;
ENUM
    : 'enum'
    ;
SERVICE
    : 'service'
    ;
RPC
    : 'rpc'
    ;
RETURNS
    : 'returns'
    ;
STREAM
    : 'stream'
    ;
MAP
    : 'map'
    ;
BOOLEAN_VALUE
    : 'true'
    | 'false'
    ;
DOUBLE
    : 'double'
    ;
FLOAT
    : 'float'
    ;
INT32
    : 'int32'
    ;
INT64
    : 'int64'
    ;
UINT32
    : 'uint32'
    ;
UINT64
    : 'uint64'
    ;
SINT32
    : 'sint32'
    ;
SINT64
    : 'sint64'
    ;
FIXED32
    : 'fixed32'
    ;
FIXED64
    : 'fixed64'
    ;
SFIXED32
    : 'sfixed32'
    ;
SFIXED64
    : 'sfixed64'
    ;
BOOL
    : 'bool'
    ;
STRING
    : 'string'
    ;
BYTES
    : 'bytes'
    ;
COMMENT
    : '/*' .*? '*/' -> channel(HIDDEN)
    ;
LINE_COMMENT
    : '//' ~('\r' | '\n')* -> channel(HIDDEN)
    ;
PLUGIN_DEV_MARKER
    // Non-protobuf.
    // Added for convenience of IntelliJ IDEA plugin development
    : (''
    | ''
    | ''
    | ''
    | ''
    | ''
    | ''
    ) -> channel(HIDDEN)
    ;
NL
    : '\r'? '\n' -> channel(HIDDEN)
    ;
WS
    : [ \t]+ -> channel(HIDDEN)
    ;
LCURLY
    :   '{'
    ;
RCURLY
    :   '}'
    ;
LPAREN
    :   '('
    ;
RPAREN
    :   ')'
    ;
LSQUARE
    :   '['
    ;
RSQUARE
    :   ']'
    ;
LT
    :   '<'
    ;
GT
    :   '>'
    ;
COMMA
    :   ','
    ;
DOT
    :   '.'
    ;
COLON
    :   ':'
    ;
SEMICOLON
    : ';'
    ;
ASSIGN
    : '='
    ;
IDENT
    :   (ALPHA | UNDERSCORE) (ALPHA | DIGIT | UNDERSCORE)*
    ;
STRING_VALUE
    : DOUBLE_QUOTE_STRING
    | SINGLE_QUOTE_STRING
    ;
INTEGER_VALUE
    : DEC_VALUE
    | HEX_VALUE
    | OCT_VALUE
    ;
FLOAT_VALUE
    : EXPONENT
    | FLOAT_LIT
    | MINUS? INF
    | NAN
    ;
fragment DOUBLE_QUOTE_STRING
    : '"' ( ESC_SEQ | ~('\\' | '"' | '\r' | '\n') )* '"'
    ;
fragment SINGLE_QUOTE_STRING
    : '\'' ( ESC_SEQ | ~('\\' | '\'' | '\r' | '\n') )* '\''
    ;
fragment EXPONENT
    : (FLOAT_LIT|DEC_VALUE) EXP DEC_VALUE
    ;
fragment FLOAT_LIT
    : MINUS? DIGIT+ '.' DIGIT*     // "0.", "0.123"
    | MINUS? '.' DIGIT+            // ".123"
    ;
fragment INF
    : 'inf'
    ;
fragment NAN 
    : 'nan'
    ;
fragment EXP
    : 'e'
    | 'E'
    ;
fragment DEC_VALUE
    : '0' | MINUS? '1'..'9' '0'..'9'*
    ;
fragment HEX_VALUE
    : MINUS? '0' [xX] HEX_DIGIT+
    ;
fragment OCT_VALUE
    : MINUS? '0' OCT_DIGIT+
    ;
fragment MINUS
    : '-'
    ;
fragment ALPHA
    : [a-zA-Z]
    ;
fragment DIGIT
    : [0-9]
    ;
fragment HEX_DIGIT
    : [0-9a-fA-F]
    ;
fragment OCT_DIGIT
    : [0-7]
    ;
fragment UNDERSCORE
    : '_'
    ;
fragment ESC_SEQ
    :   '\\' ('a'|'v'|'b'|'t'|'n'|'f'|'r'|'?'|'"'|'\''|'\\')
    |   '\\' ('x'|'X') HEX_DIGIT HEX_DIGIT
    |   UNICODE_ESC
    |   OCTAL_ESC
    ;
fragment OCTAL_ESC
    :   '\\' [0-3] OCT_DIGIT OCT_DIGIT
    |   '\\' OCT_DIGIT OCT_DIGIT
    |   '\\' OCT_DIGIT
    ;
fragment UNICODE_ESC
    :   '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
    ;

/** "catch all" rule for any char not matche in a token rule of your
 *  grammar. Lexers in Intellij must return all tokens good and bad.
 *  There must be a token to cover all characters, which makes sense, for
 *  an IDE. The parser however should not see these bad tokens because
 *  it just confuses the issue. Hence, the hidden channel.
 */
ERRCHAR
	:	.	-> channel(HIDDEN)
	;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy