1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
<!DOCTYPE html>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>highlight.g4</title>
<meta name="generator" content="KF5::SyntaxHighlighting - Definition (ANTLR) - Theme (Breeze Light)"/>
</head><body style="background-color:#ffffff;color:#1f1c1b"><pre>
<span style="color:#898887">/* This test file tests Kate's ANTLR highlighting </span>
<span style="color:#898887"> compilable bt ANTLR although not directly:</span>
<span style="color:#898887"> grammar can be alone file for both parser and lexer</span>
<span style="color:#898887"> or two files</span>
<span style="color:#898887"> This file is merged TestParser.g4 and TestLexer.g4</span>
<span style="color:#898887"> this lines also tests regions of multiline comment</span>
<span style="color:#898887">*/</span>
<span style="color:#898887">//file TestParser.g4</span>
<span style="font-weight:bold">parser</span> <span style="font-weight:bold">grammar</span> TestParser<span style="color:#ca60ca">;</span>
<span style="color:#0057ae">options</span> <span style="color:#ca60ca">{</span> tokenVocab <span style="color:#ca60ca">=</span> TestLexer<span style="color:#ca60ca">;</span> <span style="color:#ca60ca">}</span>
<span style="color:#898887">// The main entry point for parsing a grammar.</span>
startRule
<span style="color:#ca60ca">:</span> <span style="color:#ca60ca">(</span>expression <span style="color:#ca60ca">|</span> STRING<span style="color:#ca60ca">)+</span> EOF
<span style="color:#ca60ca">;</span>
expression
<span style="color:#ca60ca">:</span> expression PLUS mulExpr
<span style="color:#ca60ca">|</span> expression MINUS mulExpr
<span style="color:#ca60ca">|</span> mulExpr
<span style="color:#ca60ca">;</span>
mulExpr
<span style="color:#ca60ca">:</span> mulExpr MUL unaryExpr
<span style="color:#ca60ca">|</span> mulExpr DIV unaryExpr
<span style="color:#ca60ca">|</span> unaryExpr
<span style="color:#ca60ca">;</span>
unaryExpr
<span style="color:#ca60ca">:</span> atom
<span style="color:#ca60ca">|</span> LPAR expression RPAR
<span style="color:#ca60ca">;</span>
atom
<span style="color:#ca60ca">:</span> IDENT
<span style="color:#ca60ca">|</span> number
<span style="color:#ca60ca">;</span>
number
<span style="color:#ca60ca">:</span> INT
<span style="color:#ca60ca">|</span> FLOAT
<span style="color:#ca60ca">;</span>
<span style="color:#898887">//================================</span>
<span style="color:#898887">//file TestLexer.g4</span>
<span style="font-weight:bold">lexer</span> <span style="font-weight:bold">grammar</span> TestLexer<span style="color:#ca60ca">;</span>
<span style="color:#898887">/*'channels' and '{' must be in one line</span>
<span style="color:#898887"> to correct highlighting, highlighter can't</span>
<span style="color:#898887"> recognize regular expression "(options|tokens|channels)(?=([\s]*{))"</span>
<span style="color:#898887"> where apart from \s whitrspaces are end of lines</span>
<span style="color:#898887"> */</span>
<span style="color:#0057ae">channels</span> <span style="color:#ca60ca">{</span> OFF_CHANNEL <span style="color:#ca60ca">,</span> COMMENT <span style="color:#ca60ca">}</span>
PLUS
<span style="color:#ca60ca">:</span> <span style="color:#bf0303">'+'</span>
<span style="color:#ca60ca">;</span>
MINUS
<span style="color:#ca60ca">:</span> <span style="color:#bf0303">'-'</span>
<span style="color:#ca60ca">;</span>
MUL
<span style="color:#ca60ca">:</span> <span style="color:#bf0303">'*'</span>
<span style="color:#ca60ca">;</span>
DIV
<span style="color:#ca60ca">:</span> <span style="color:#bf0303">'/'</span>
<span style="color:#ca60ca">;</span>
LPAR
<span style="color:#ca60ca">:</span> <span style="color:#bf0303">'('</span>
<span style="color:#ca60ca">;</span>
RPAR
<span style="color:#ca60ca">:</span> <span style="color:#bf0303">')'</span>
<span style="color:#ca60ca">;</span>
IDENT
<span style="color:#ca60ca">:</span> Nondigit
<span style="color:#ca60ca">(</span> Nondigit
<span style="color:#ca60ca">|</span> Digit
<span style="color:#ca60ca">)*</span>
<span style="color:#ca60ca">;</span>
<span style="font-weight:bold">fragment</span>
Digit
<span style="color:#ca60ca">:</span> <span style="color:#924c9d">[0-9]</span>
<span style="color:#ca60ca">;</span>
<span style="font-weight:bold">fragment</span>
NonzeroDigit
<span style="color:#ca60ca">:</span> <span style="color:#924c9d">[1-9]</span>
<span style="color:#ca60ca">;</span>
<span style="font-weight:bold">fragment</span>
Nondigit
<span style="color:#ca60ca">:</span> <span style="color:#924c9d">[a-zA-Z_]</span>
<span style="color:#ca60ca">;</span>
Sign
<span style="color:#ca60ca">:</span> <span style="color:#bf0303">'+'</span> <span style="color:#ca60ca">|</span> <span style="color:#bf0303">'-'</span>
<span style="color:#ca60ca">;</span>
INT
<span style="color:#ca60ca">:</span> Sign<span style="color:#ca60ca">?</span> <span style="color:#ca60ca">(</span>NonzeroDigit Digit<span style="color:#ca60ca">*</span> <span style="color:#ca60ca">|</span> <span style="color:#bf0303">'0'</span><span style="color:#ca60ca">)</span>
<span style="color:#ca60ca">;</span>
<span style="font-weight:bold">fragment</span>
DigitSequence
<span style="color:#ca60ca">:</span> Digit<span style="color:#ca60ca">+</span>
<span style="color:#ca60ca">;</span>
<span style="font-weight:bold">fragment</span>
ExponentPart
<span style="color:#ca60ca">:</span> <span style="color:#924c9d">[eE]</span> Sign<span style="color:#ca60ca">?</span> DigitSequence
<span style="color:#ca60ca">;</span>
<span style="font-weight:bold">fragment</span>
FractionalConstant
<span style="color:#ca60ca">:</span> DigitSequence<span style="color:#ca60ca">?</span> <span style="color:#bf0303">'.'</span> DigitSequence
<span style="color:#ca60ca">|</span> DigitSequence <span style="color:#bf0303">'.'</span>
<span style="color:#ca60ca">;</span>
FLOAT
<span style="color:#ca60ca">:</span> <span style="color:#ca60ca">(</span>FractionalConstant ExponentPart<span style="color:#ca60ca">?</span> <span style="color:#ca60ca">|</span> DigitSequence ExponentPart<span style="color:#ca60ca">)</span>
<span style="color:#ca60ca">;</span>
<span style="font-weight:bold">fragment</span>
EscapeSequence
<span style="color:#ca60ca">:</span> <span style="color:#bf0303">'\\'</span> <span style="color:#924c9d">['"?abfnrtvhe\\]</span>
<span style="color:#ca60ca">;</span>
<span style="color:#898887">//between [] is charset , test escape \</span>
<span style="color:#898887">fragment</span>
SChar
<span style="color:#ca60ca">:</span> <span style="color:#ca60ca">~</span><span style="color:#924c9d">["\\\r\n]</span>
<span style="color:#ca60ca">|</span> EscapeSequence
<span style="color:#ca60ca">;</span>
STRING
<span style="color:#ca60ca">:</span> <span style="color:#bf0303">'"'</span> SChar<span style="color:#ca60ca">*</span> <span style="color:#bf0303">'"'</span>
<span style="color:#ca60ca">;</span>
</pre></body></html>
|