149 lines
2.1 KiB
Plaintext
149 lines
2.1 KiB
Plaintext
<beginfold id='1'>/*</beginfold id='1'> This test file tests Kate's ANTLR highlighting
|
|
compilable bt ANTLR although not directly:
|
|
grammar can be alone file for both parser and lexer
|
|
or two files
|
|
This file is merged TestParser.g4 and TestLexer.g4
|
|
this lines also tests regions of multiline comment
|
|
<endfold id='1'>*/</endfold id='1'>
|
|
//file TestParser.g4
|
|
parser grammar TestParser;
|
|
|
|
options { tokenVocab = TestLexer; }
|
|
|
|
// The main entry point for parsing a grammar.
|
|
|
|
startRule
|
|
: (expression | STRING)+ EOF
|
|
;
|
|
|
|
expression
|
|
: expression PLUS mulExpr
|
|
| expression MINUS mulExpr
|
|
| mulExpr
|
|
;
|
|
|
|
mulExpr
|
|
: mulExpr MUL unaryExpr
|
|
| mulExpr DIV unaryExpr
|
|
| unaryExpr
|
|
;
|
|
|
|
unaryExpr
|
|
: atom
|
|
| LPAR expression RPAR
|
|
;
|
|
|
|
atom
|
|
: IDENT
|
|
| number
|
|
;
|
|
|
|
number
|
|
: INT
|
|
| FLOAT
|
|
;
|
|
|
|
//================================
|
|
//file TestLexer.g4
|
|
|
|
lexer grammar TestLexer;
|
|
|
|
<beginfold id='1'>/*</beginfold id='1'>'channels' and '{' must be in one line
|
|
to correct highlighting, highlighter can't
|
|
recognize regular expression "(options|tokens|channels)(?=([\s]*{))"
|
|
where apart from \s whitrspaces are end of lines
|
|
<endfold id='1'>*/</endfold id='1'>
|
|
channels { OFF_CHANNEL , COMMENT }
|
|
|
|
|
|
PLUS
|
|
: '+'
|
|
;
|
|
|
|
MINUS
|
|
: '-'
|
|
;
|
|
|
|
MUL
|
|
: '*'
|
|
;
|
|
|
|
DIV
|
|
: '/'
|
|
;
|
|
|
|
LPAR
|
|
: '('
|
|
;
|
|
|
|
RPAR
|
|
: ')'
|
|
;
|
|
|
|
IDENT
|
|
: Nondigit
|
|
( Nondigit
|
|
| Digit
|
|
)*
|
|
;
|
|
|
|
fragment
|
|
Digit
|
|
: [0-9]
|
|
;
|
|
|
|
fragment
|
|
NonzeroDigit
|
|
: [1-9]
|
|
;
|
|
|
|
fragment
|
|
Nondigit
|
|
: [a-zA-Z_]
|
|
;
|
|
|
|
Sign
|
|
: '+' | '-'
|
|
;
|
|
|
|
INT
|
|
: Sign? (NonzeroDigit Digit* | '0')
|
|
;
|
|
|
|
fragment
|
|
DigitSequence
|
|
: Digit+
|
|
;
|
|
|
|
fragment
|
|
ExponentPart
|
|
: [eE] Sign? DigitSequence
|
|
;
|
|
|
|
fragment
|
|
FractionalConstant
|
|
: DigitSequence? '.' DigitSequence
|
|
| DigitSequence '.'
|
|
;
|
|
|
|
FLOAT
|
|
: (FractionalConstant ExponentPart? | DigitSequence ExponentPart)
|
|
;
|
|
|
|
|
|
fragment
|
|
EscapeSequence
|
|
: '\\' ['"?abfnrtvhe\\]
|
|
;
|
|
|
|
//between [] is charset , test escape \
|
|
fragment
|
|
SChar
|
|
: ~["\\\r\n]
|
|
| EscapeSequence
|
|
;
|
|
|
|
STRING
|
|
: '"' SChar* '"'
|
|
;
|