| 1 | /******************************************************************************* |
|---|
| 2 | Copyright 2009 Sun Microsystems, Inc., |
|---|
| 3 | 4150 Network Circle, Santa Clara, California 95054, U.S.A. |
|---|
| 4 | All rights reserved. |
|---|
| 5 | |
|---|
| 6 | U.S. Government Rights - Commercial software. |
|---|
| 7 | Government users are subject to the Sun Microsystems, Inc. standard |
|---|
| 8 | license agreement and applicable provisions of the FAR and its supplements. |
|---|
| 9 | |
|---|
| 10 | Use is subject to license terms. |
|---|
| 11 | |
|---|
| 12 | This distribution may include materials developed by third parties. |
|---|
| 13 | |
|---|
| 14 | Sun, Sun Microsystems, the Sun logo and Java are trademarks or registered |
|---|
| 15 | trademarks of Sun Microsystems, Inc. in the U.S. and other countries. |
|---|
| 16 | ******************************************************************************/ |
|---|
| 17 | |
|---|
| 18 | /* |
|---|
| 19 | * Definition of Fortress literals. |
|---|
| 20 | */ |
|---|
| 21 | module com.sun.fortress.parser.Literal(Symbol, Spacing); |
|---|
| 22 | |
|---|
| 23 | import Symbol; |
|---|
| 24 | import Spacing; |
|---|
| 25 | |
|---|
| 26 | /* LiteralExpr ::= |
|---|
| 27 | ( w ) |
|---|
| 28 | | NumericLiteralExpr |
|---|
| 29 | | CharLiteralExpr |
|---|
| 30 | | StringLiteralExpr |
|---|
| 31 | */ |
|---|
| 32 | Expr LiteralExpr = |
|---|
| 33 | <VOID> VoidLiteralExpr |
|---|
| 34 | / <NUMERICAL> NumericLiteralExpr |
|---|
| 35 | / <CHAR> CharLiteralExpr |
|---|
| 36 | / <STRING> StringLiteralExpr |
|---|
| 37 | ; |
|---|
| 38 | |
|---|
| 39 | Expr VoidLiteralExpr = |
|---|
| 40 | <FIRST> openparen w closeparen |
|---|
| 41 | { yyValue = ExprFactory.makeVoidLiteralExpr(createSpan(yyStart,yyCount)); }; |
|---|
| 42 | |
|---|
| 43 | transient IntLiteralExpr IntLiteralExpr = |
|---|
| 44 | <FIRST> a1:NumericLiteralExpr &{ (a1 instanceof IntLiteralExpr) } |
|---|
| 45 | { yyValue = (IntLiteralExpr)a1; }; |
|---|
| 46 | |
|---|
| 47 | NumberLiteralExpr NumericLiteralExpr = |
|---|
| 48 | NumericLiteralWithRadix |
|---|
| 49 | / a1:NumericWord a2s:RestNumericWord* &{ Character.isDigit(a1.charAt(0)) } |
|---|
| 50 | { String numeral = a1; |
|---|
| 51 | for (String n: a2s.list()) numeral += n; |
|---|
| 52 | Span span = createSpan(yyStart,yyCount); |
|---|
| 53 | NodeUtil.validNumericLiteral(writer, span, numeral); |
|---|
| 54 | if ( NodeUtil.validIntLiteral(numeral) ) |
|---|
| 55 | yyValue = ExprFactory.makeIntLiteralExpr(span, numeral); |
|---|
| 56 | else yyValue = ExprFactory.makeFloatLiteralExpr(span, numeral); |
|---|
| 57 | }; |
|---|
| 58 | |
|---|
| 59 | private NumberLiteralExpr NumericLiteralWithRadix = |
|---|
| 60 | a1:NumericWord a2s:RestNumericWord* "_" a3:RadixSpecifier |
|---|
| 61 | { String numeral = a1; |
|---|
| 62 | for (String n: a2s.list()) numeral += n; |
|---|
| 63 | Span span = createSpan(yyStart,yyCount); |
|---|
| 64 | NodeUtil.validNumericLiteral(writer, span, numeral, a3); |
|---|
| 65 | numeral += "_"+NodeUtil.radix2Number(a3); |
|---|
| 66 | if ( NodeUtil.validIntLiteral(numeral) ) |
|---|
| 67 | yyValue = ExprFactory.makeIntLiteralExpr(span, numeral); |
|---|
| 68 | else yyValue = ExprFactory.makeFloatLiteralExpr(span, numeral); |
|---|
| 69 | }; |
|---|
| 70 | |
|---|
| 71 | private transient String NumericWord = |
|---|
| 72 | a1s:NumericCharacter+ |
|---|
| 73 | { yyValue = ""; |
|---|
| 74 | for (String n: a1s.list()) yyValue += n; |
|---|
| 75 | }; |
|---|
| 76 | private transient String NumericCharacter = [0-9a-zA-Z]; |
|---|
| 77 | |
|---|
| 78 | private transient String RestNumericWord = |
|---|
| 79 | a1:NumericSeparator a2:NumericWord { yyValue = a1+a2; }; |
|---|
| 80 | |
|---|
| 81 | private transient String NumericSeparator = NumericSpace / "." ; |
|---|
| 82 | private transient String NumericSpace = "'" / "\u202f" ; |
|---|
| 83 | |
|---|
| 84 | private transient String RadixSpecifier = |
|---|
| 85 | a1:DigitString !([a-zA-Z]) &{ NodeUtil.validRadix(writer, createSpan(yyStart,yyCount), a1) } |
|---|
| 86 | / RadixNames ; |
|---|
| 87 | |
|---|
| 88 | private transient String DigitString = [0-9]+; |
|---|
| 89 | |
|---|
| 90 | private transient String RadixNames = |
|---|
| 91 | "SIXTEEN" |
|---|
| 92 | / "FIFTEEN" |
|---|
| 93 | / "FOURTEEN" |
|---|
| 94 | / "THIRTEEN" |
|---|
| 95 | / "TWELVE" |
|---|
| 96 | / "ELEVEN" |
|---|
| 97 | / "TEN" |
|---|
| 98 | / "NINE" |
|---|
| 99 | / "EIGHT" |
|---|
| 100 | / "SEVEN" |
|---|
| 101 | / "SIX" |
|---|
| 102 | / "FIVE" |
|---|
| 103 | / "FOUR" |
|---|
| 104 | / "THREE" |
|---|
| 105 | / "TWO" ; |
|---|
| 106 | |
|---|
| 107 | CharLiteralExpr CharLiteralExpr = |
|---|
| 108 | <FIRST> "'" a1:CharLiteralContent "'" |
|---|
| 109 | { yyValue = ExprFactory.makeCharLiteralExpr(createSpan(yyStart,yyCount), a1); } |
|---|
| 110 | / "`" a1:CharLiteralContent "'" |
|---|
| 111 | { yyValue = ExprFactory.makeCharLiteralExpr(createSpan(yyStart,yyCount), a1); } |
|---|
| 112 | / "\u2018" a1:CharLiteralContent "\u2019" |
|---|
| 113 | { yyValue = ExprFactory.makeCharLiteralExpr(createSpan(yyStart,yyCount), a1); } |
|---|
| 114 | / <ErrorProduction1> "'" a1:CharLiteralContent "\u2019" |
|---|
| 115 | { Span span = createSpan(yyStart,yyCount); |
|---|
| 116 | log(span, "The opening and closing marks of a character literal must match."); |
|---|
| 117 | yyValue = ExprFactory.makeCharLiteralExpr(span, ""); |
|---|
| 118 | } |
|---|
| 119 | / <ErrorProduction2> "`" a1:CharLiteralContent "\u2019" |
|---|
| 120 | { Span span = createSpan(yyStart,yyCount); |
|---|
| 121 | log(span, "The opening and closing marks of a character literal must match."); |
|---|
| 122 | yyValue = ExprFactory.makeCharLiteralExpr(span, ""); |
|---|
| 123 | } |
|---|
| 124 | / <ErrorProduction3> "\u2018" a1:CharLiteralContent "'" |
|---|
| 125 | { Span span = createSpan(yyStart,yyCount); |
|---|
| 126 | log(span, "The opening and closing marks of a character literal must match."); |
|---|
| 127 | yyValue = ExprFactory.makeCharLiteralExpr(span, ""); |
|---|
| 128 | }; |
|---|
| 129 | |
|---|
| 130 | StringLiteralExpr StringLiteralExpr = |
|---|
| 131 | <FIRST> ["] a1:StringLiteralContent* ["] |
|---|
| 132 | { String str = ""; |
|---|
| 133 | for (String c : (List<String>)a1.list()) str = str.concat(c); |
|---|
| 134 | yyValue = ExprFactory.makeStringLiteralExpr(createSpan(yyStart,yyCount), str); |
|---|
| 135 | } |
|---|
| 136 | / "\u201c" a1:StringLiteralContent* "\u201d" |
|---|
| 137 | { String str = ""; |
|---|
| 138 | for (String c : (List<String>)a1.list()) str = str.concat(c); |
|---|
| 139 | yyValue = ExprFactory.makeStringLiteralExpr(createSpan(yyStart,yyCount), str); |
|---|
| 140 | } |
|---|
| 141 | / <ErrorProduction1> ["] a1:StringLiteralContent* "\u201d" |
|---|
| 142 | { Span span = createSpan(yyStart,yyCount); |
|---|
| 143 | log(span, "The opening and closing marks of a string literal must match."); |
|---|
| 144 | yyValue = ExprFactory.makeStringLiteralExpr(span, ""); |
|---|
| 145 | } |
|---|
| 146 | / <ErrorProduction2> "\u201c" a1:StringLiteralContent* ["] |
|---|
| 147 | { Span span = createSpan(yyStart,yyCount); |
|---|
| 148 | log(span, "The opening and closing marks of a string literal must match."); |
|---|
| 149 | yyValue = ExprFactory.makeStringLiteralExpr(span, ""); |
|---|
| 150 | }; |
|---|
| 151 | private String StringLiteralContent = |
|---|
| 152 | EscapeSequence |
|---|
| 153 | / a1:(!InvalidStringLiteralContent _) { yyValue = String.valueOf(a1); }; |
|---|
| 154 | |
|---|
| 155 | private void InvalidStringLiteralContent = |
|---|
| 156 | void:["\u201c\u201d] |
|---|
| 157 | / a1:[\\] |
|---|
| 158 | { log(createSpan(yyStart,yyCount), "Invalid string literal content: " + a1); } |
|---|
| 159 | / a1:[\n\f\r\u0009\u000b\u001c\u001d\u001e\u001f\u2028\u2029] |
|---|
| 160 | { log(createSpan(yyStart,yyCount), "Invalid string literal content: " + a1); } |
|---|
| 161 | / c:_ &{ Character.getType(c) == Character.CONTROL } |
|---|
| 162 | { log(createSpan(yyStart,yyCount), "Invalid string literal content: " + c); }; |
|---|
| 163 | |
|---|
| 164 | private String EscapeSequence = |
|---|
| 165 | '\\' a1:[btnfr"\\] |
|---|
| 166 | { switch (a1) { |
|---|
| 167 | case 'b': { yyValue = "\b"; break; } |
|---|
| 168 | case 't': { yyValue = "\t"; break; } |
|---|
| 169 | case 'n': { yyValue = "\n"; break; } |
|---|
| 170 | case 'f': { yyValue = "\f"; break; } |
|---|
| 171 | case 'r': { yyValue = "\r"; break; } |
|---|
| 172 | case '"': { yyValue = "\""; break; } |
|---|
| 173 | case '\\': { yyValue = "\\"; break; } |
|---|
| 174 | default: { yyValue = ""; } |
|---|
| 175 | } |
|---|
| 176 | } |
|---|
| 177 | / '\\' a1:[\u201c] { yyValue = "\u201c"; } |
|---|
| 178 | / '\\' a1:[\u201d] { yyValue = "\u201d"; }; |
|---|
| 179 | |
|---|
| 180 | private String CharLiteralContent = |
|---|
| 181 | EscapeSequence |
|---|
| 182 | / "ALPHA" { yyValue = "\u0391"; } |
|---|
| 183 | / "BETA" { yyValue = "\u0392"; } |
|---|
| 184 | / "GAMMA" { yyValue = "\u0393"; } |
|---|
| 185 | / "DELTA" { yyValue = "\u0394"; } |
|---|
| 186 | / "EPSILON" { yyValue = "\u0395"; } |
|---|
| 187 | / "ZETA" { yyValue = "\u0396"; } |
|---|
| 188 | / "ETA" { yyValue = "\u0397"; } |
|---|
| 189 | / "THETA" { yyValue = "\u0398"; } |
|---|
| 190 | / "IOTA" { yyValue = "\u0399"; } |
|---|
| 191 | / "KAPPA" { yyValue = "\u039A"; } |
|---|
| 192 | / "LAMBDA" { yyValue = "\u039B"; } |
|---|
| 193 | / "MU" { yyValue = "\u039C"; } |
|---|
| 194 | / "NU" { yyValue = "\u039D"; } |
|---|
| 195 | / "XI" { yyValue = "\u039E"; } |
|---|
| 196 | / "OMICRON" { yyValue = "\u039F"; } |
|---|
| 197 | / "PI" { yyValue = "\u0400"; } |
|---|
| 198 | / "RHO" { yyValue = "\u0401"; } |
|---|
| 199 | / "SIGMA" { yyValue = "\u0403"; } |
|---|
| 200 | / "TAU" { yyValue = "\u0404"; } |
|---|
| 201 | / "UPSILON" { yyValue = "\u0405"; } |
|---|
| 202 | / "PHI" { yyValue = "\u0406"; } |
|---|
| 203 | / "CHI" { yyValue = "\u0407"; } |
|---|
| 204 | / "PSI" { yyValue = "\u0408"; } |
|---|
| 205 | / "OMEGA" { yyValue = "\u0409"; } |
|---|
| 206 | / "alpha" { yyValue = "\u03B1"; } |
|---|
| 207 | / "beta" { yyValue = "\u03B2"; } |
|---|
| 208 | / "gamma" { yyValue = "\u03B3"; } |
|---|
| 209 | / "delta" { yyValue = "\u03B4"; } |
|---|
| 210 | / "epsilon" { yyValue = "\u03B5"; } |
|---|
| 211 | / "zeta" { yyValue = "\u03B6"; } |
|---|
| 212 | / "eta" { yyValue = "\u03B7"; } |
|---|
| 213 | / "theta" { yyValue = "\u03B8"; } |
|---|
| 214 | / "iota" { yyValue = "\u03B9"; } |
|---|
| 215 | / "kappa" { yyValue = "\u03BA"; } |
|---|
| 216 | / "lambda" { yyValue = "\u03BB"; } |
|---|
| 217 | / "mu" { yyValue = "\u03BC"; } |
|---|
| 218 | / "nu" { yyValue = "\u03BD"; } |
|---|
| 219 | / "xi" { yyValue = "\u03BE"; } |
|---|
| 220 | / "omicron" { yyValue = "\u03BF"; } |
|---|
| 221 | / "pi" { yyValue = "\u03C0"; } |
|---|
| 222 | / "rho" { yyValue = "\u03C1"; } |
|---|
| 223 | / "sigma" { yyValue = "\u03C3"; } |
|---|
| 224 | / "tau" { yyValue = "\u03C4"; } |
|---|
| 225 | / "upsilon" { yyValue = "\u03C5"; } |
|---|
| 226 | / "phi" { yyValue = "\u03C6"; } |
|---|
| 227 | / "chi" { yyValue = "\u03C7"; } |
|---|
| 228 | / "psi" { yyValue = "\u03C8"; } |
|---|
| 229 | / "omega" { yyValue = "\u03C9"; } |
|---|
| 230 | / "BOTTOM" { yyValue = "\u22A5"; } |
|---|
| 231 | / "TOP" { yyValue = "\u22A4"; } |
|---|
| 232 | / "INF" { yyValue = "\u221E"; } |
|---|
| 233 | / "FORALL" { yyValue = "\u2200"; } |
|---|
| 234 | / "EXISTS" { yyValue = "\u2203"; } |
|---|
| 235 | / "TIMES" { yyValue = "\u00D7"; } |
|---|
| 236 | / "BY" { yyValue = "\u00D7"; } |
|---|
| 237 | / "OTIMES" { yyValue = "\u2297"; } |
|---|
| 238 | / "ODOT" { yyValue = "\u2299"; } |
|---|
| 239 | / "CIRCLEDAST" { yyValue = "\u229B"; } |
|---|
| 240 | / "BOXTIMES" { yyValue = "\u22A0"; } |
|---|
| 241 | / "BOXDOT" { yyValue = "\u22A1"; } |
|---|
| 242 | / "BOXAST" { yyValue = "\u29C6"; } |
|---|
| 243 | / "CROSS" { yyValue = "\u2A2F"; } |
|---|
| 244 | / "DOTTIMES" { yyValue = "\u2A30"; } |
|---|
| 245 | / "TRITIMES" { yyValue = "\u2A3B"; } |
|---|
| 246 | / "DIVIDES" { yyValue = "\u2223"; } |
|---|
| 247 | / "DIV" { yyValue = "\u00F7"; } |
|---|
| 248 | / "OSLASH" { yyValue = "\u2298"; } |
|---|
| 249 | / "BOXSLASH" { yyValue = "\u29C4"; } |
|---|
| 250 | / "ODIV" { yyValue = "\u2A38"; } |
|---|
| 251 | / "DOTPLUS" { yyValue = "\u2214"; } |
|---|
| 252 | / "DOTMINUS" { yyValue = "\u2238"; } |
|---|
| 253 | / "TRIPLUS" { yyValue = "\u2A39"; } |
|---|
| 254 | / "TRIMINUS" { yyValue = "\u2A3A"; } |
|---|
| 255 | / "OPLUS" { yyValue = "\u2295"; } |
|---|
| 256 | / "OMINUS" { yyValue = "\u2296"; } |
|---|
| 257 | / "BOXPLUS" { yyValue = "\u229E"; } |
|---|
| 258 | / "BOXMINUS" { yyValue = "\u229F"; } |
|---|
| 259 | / "CAPCAP" { yyValue = "\u22D2"; } |
|---|
| 260 | / "CAP" { yyValue = "\u2229"; } |
|---|
| 261 | / "INTERSECT" { yyValue = "\u2229"; } |
|---|
| 262 | / "CUPCUP" { yyValue = "\u22D3"; } |
|---|
| 263 | / "CUP" { yyValue = "\u222A"; } |
|---|
| 264 | / "UNION" { yyValue = "\u222A"; } |
|---|
| 265 | / "UPLUS" { yyValue = "\u228E"; } |
|---|
| 266 | / "SETMINUS" { yyValue = "\u2216"; } |
|---|
| 267 | / "SQCAPCAP" { yyValue = "\u2A4E"; } |
|---|
| 268 | / "SQCAP" { yyValue = "\u2293"; } |
|---|
| 269 | / "SQCUPCUP" { yyValue = "\u2A4F"; } |
|---|
| 270 | / "SQCUP" { yyValue = "\u2294"; } |
|---|
| 271 | / "CURLYAND" { yyValue = "\u22CF"; } |
|---|
| 272 | / "CURLYOR" { yyValue = "\u22CE"; } |
|---|
| 273 | / "SIMEQ" { yyValue = "\u2243"; } |
|---|
| 274 | / "APPROXEQ" { yyValue = "\u224A"; } |
|---|
| 275 | / "APPROX" { yyValue = "\u2248"; } |
|---|
| 276 | / "BUMPEQV" { yyValue = "\u224E"; } |
|---|
| 277 | / "DOTEQDOT" { yyValue = "\u2251"; } |
|---|
| 278 | / "EQRING" { yyValue = "\u2256"; } |
|---|
| 279 | / "RINGEQ" { yyValue = "\u2257"; } |
|---|
| 280 | / "EQDEL" { yyValue = "\u225C"; } |
|---|
| 281 | / "EQDEF" { yyValue = "\u225D"; } |
|---|
| 282 | / "EQV" { yyValue = "\u2261"; } |
|---|
| 283 | / "EQUIV" { yyValue = "\u2261"; } |
|---|
| 284 | / "SEQV" { yyValue = "\u2263"; } |
|---|
| 285 | / "NSIMEQ" { yyValue = "\u2244"; } |
|---|
| 286 | / "NAPPROX" { yyValue = "\u2249"; } |
|---|
| 287 | / "NEQV" { yyValue = "\u2262"; } |
|---|
| 288 | / "NEARROW" { yyValue = "\u2197"; } |
|---|
| 289 | / "NE" { yyValue = "\u2260"; } |
|---|
| 290 | / "LT" { yyValue = "\u003C"; } |
|---|
| 291 | / "<=>" { yyValue = "\u21D4"; } |
|---|
| 292 | / "<=" { yyValue = "\u2264"; } |
|---|
| 293 | / "LEADSTO" { yyValue = "\u219D"; } |
|---|
| 294 | / "DOTLT" { yyValue = "\u22D6"; } |
|---|
| 295 | / "<<<" { yyValue = "\u22D8"; } |
|---|
| 296 | / "<<" { yyValue = "\u226A"; } |
|---|
| 297 | / "GT" { yyValue = "\u003E"; } |
|---|
| 298 | / ">=" { yyValue = "\u2265"; } |
|---|
| 299 | / "GE" { yyValue = "\u2265"; } |
|---|
| 300 | / ">>>" { yyValue = "\u22D9"; } |
|---|
| 301 | / ">>" { yyValue = "\u226B"; } |
|---|
| 302 | / "DOTGT" { yyValue = "\u22D7"; } |
|---|
| 303 | / "NLT" { yyValue = "\u226E"; } |
|---|
| 304 | / "NGT" { yyValue = "\u226F"; } |
|---|
| 305 | / "NLE" { yyValue = "\u2270"; } |
|---|
| 306 | / "NGE" { yyValue = "\u2271"; } |
|---|
| 307 | / "SUBSETEQ" { yyValue = "\u2286"; } |
|---|
| 308 | / "SUBSETNEQ" { yyValue = "\u228A"; } |
|---|
| 309 | / "SUBSET" { yyValue = "\u2282"; } |
|---|
| 310 | / "SUBSUB" { yyValue = "\u22D0"; } |
|---|
| 311 | / "SUPSETEQ" { yyValue = "\u2287"; } |
|---|
| 312 | / "SUPSETNEQ" { yyValue = "\u228B"; } |
|---|
| 313 | / "SUPSET" { yyValue = "\u2283"; } |
|---|
| 314 | / "SUPSUP" { yyValue = "\u22D1"; } |
|---|
| 315 | / "NSUBSETEQ" { yyValue = "\u2288"; } |
|---|
| 316 | / "NSUPSETEQ" { yyValue = "\u2289"; } |
|---|
| 317 | / "NSUBSET" { yyValue = "\u2284"; } |
|---|
| 318 | / "NSUPSET" { yyValue = "\u2285"; } |
|---|
| 319 | / "SQSUBSETEQ" { yyValue = "\u2291"; } |
|---|
| 320 | / "SQSUBSET" { yyValue = "\u228F"; } |
|---|
| 321 | / "SQSUPSETEQ" { yyValue = "\u2292"; } |
|---|
| 322 | / "SQSUPSET" { yyValue = "\u2290"; } |
|---|
| 323 | / "PRECEQ" { yyValue = "\u227C"; } |
|---|
| 324 | / "PRECSIM" { yyValue = "\u227E"; } |
|---|
| 325 | / "PRECNSIM" { yyValue = "\u22E8"; } |
|---|
| 326 | / "PREC" { yyValue = "\u227A"; } |
|---|
| 327 | / "EQPREC" { yyValue = "\u22DE"; } |
|---|
| 328 | / "SUCCEQ" { yyValue = "\u227D"; } |
|---|
| 329 | / "SUCCSIM" { yyValue = "\u227F"; } |
|---|
| 330 | / "SUCCNSIM" { yyValue = "\u22E9"; } |
|---|
| 331 | / "SUCC" { yyValue = "\u227B"; } |
|---|
| 332 | / "EQSUCC" { yyValue = "\u22DF"; } |
|---|
| 333 | / "EQ" { yyValue = "\u003D"; } |
|---|
| 334 | / "NPREC" { yyValue = "\u2280"; } |
|---|
| 335 | / "NSUCC" { yyValue = "\u2281"; } |
|---|
| 336 | / "SMALLEREQ" { yyValue = "\u2AAC"; } |
|---|
| 337 | / "SMALLER" { yyValue = "\u2AAA"; } |
|---|
| 338 | / "LARGEREQ" { yyValue = "\u2AAD"; } |
|---|
| 339 | / "LARGER" { yyValue = "\u2AAB"; } |
|---|
| 340 | / "INTEGRAL" { yyValue = "\u222B"; } |
|---|
| 341 | / "IN" { yyValue = "\u2208"; } |
|---|
| 342 | / "NOTIN" { yyValue = "\u2209"; } |
|---|
| 343 | / "CONTAINS" { yyValue = "\u220B"; } |
|---|
| 344 | / "AND" { yyValue = "\u2227"; } |
|---|
| 345 | / "OR" { yyValue = "\u2228"; } |
|---|
| 346 | / "->" { yyValue = "\u2192"; } |
|---|
| 347 | / "IMPLIES" { yyValue = "\u2192"; } |
|---|
| 348 | / "<->" { yyValue = "\u2194"; } |
|---|
| 349 | / "IFF" { yyValue = "\u2194"; } |
|---|
| 350 | / "CENTS" { yyValue = "\u00A2"; } |
|---|
| 351 | / "DEGREES" { yyValue = "\u00B0"; } |
|---|
| 352 | / "!!" { yyValue = "\u203C"; } |
|---|
| 353 | / "<-/-" { yyValue = "\u219A"; } |
|---|
| 354 | / "<-" { yyValue = "\u2190"; } |
|---|
| 355 | / "UPARROW" { yyValue = "\u2191"; } |
|---|
| 356 | / "DOWNARROW" { yyValue = "\u2193"; } |
|---|
| 357 | / "UPDOWNARROW" { yyValue = "\u2195"; } |
|---|
| 358 | / "NWARROW" { yyValue = "\u2196"; } |
|---|
| 359 | / "SEARROW" { yyValue = "\u2198"; } |
|---|
| 360 | / "SWARROW" { yyValue = "\u2199"; } |
|---|
| 361 | / "-/->" { yyValue = "\u219B"; } |
|---|
| 362 | / "LEFTHARPOONUP" { yyValue = "\u21BC"; } |
|---|
| 363 | / "LEFTHARPOONDOWN" { yyValue = "\u21BD"; } |
|---|
| 364 | / "UPHARPOONRIGHT" { yyValue = "\u21BE"; } |
|---|
| 365 | / "UPHARPOONLEFT" { yyValue = "\u21BF"; } |
|---|
| 366 | / "RIGHTHARPOONUP" { yyValue = "\u21C0"; } |
|---|
| 367 | / "RIGHTHARPOONDOWN" { yyValue = "\u21C1"; } |
|---|
| 368 | / "DOWNHARPOONRIGHT" { yyValue = "\u21C2"; } |
|---|
| 369 | / "DOWNHARPOONLEFT" { yyValue = "\u21C3"; } |
|---|
| 370 | / "RIGHTLEFTARROWS" { yyValue = "\u21C4"; } |
|---|
| 371 | / "LEFTRIGHTARROWS" { yyValue = "\u21C6"; } |
|---|
| 372 | / "LEFTLEFTARROWS" { yyValue = "\u21C7"; } |
|---|
| 373 | / "UPUPARROWS" { yyValue = "\u21C8"; } |
|---|
| 374 | / "RIGHTRIGHTARROWS" { yyValue = "\u21C9"; } |
|---|
| 375 | / "DOWNDOWNARROWS" { yyValue = "\u21CA"; } |
|---|
| 376 | / "RIGHTLEFTHARPOONS" { yyValue = "\u21CC"; } |
|---|
| 377 | / "LE" { yyValue = "\u2264"; } |
|---|
| 378 | / "=>" { yyValue = "\u21D2"; } |
|---|
| 379 | / "DEL" { yyValue = "\u2202"; } |
|---|
| 380 | / "PRODUCT" { yyValue = "\u220F"; } |
|---|
| 381 | / "COPRODUCT" { yyValue = "\u2210"; } |
|---|
| 382 | / "SUM" { yyValue = "\u2211"; } |
|---|
| 383 | / "CIRCLEDRING" { yyValue = "\u229A"; } |
|---|
| 384 | / "CIRC" { yyValue = "\u2218"; } |
|---|
| 385 | / "RING" { yyValue = "\u2218"; } |
|---|
| 386 | / "COMPOSE" { yyValue = "\u2218"; } |
|---|
| 387 | / "BULLET" { yyValue = "\u2219"; } |
|---|
| 388 | / "SQRT" { yyValue = "\u221A"; } |
|---|
| 389 | / "CBRT" { yyValue = "\u221B"; } |
|---|
| 390 | / "FOURTHROOT" { yyValue = "\u221C"; } |
|---|
| 391 | / "PROPTO" { yyValue = "\u221D"; } |
|---|
| 392 | / "PARALLEL" { yyValue = "\u2225"; } |
|---|
| 393 | / "NPARALLEL" { yyValue = "\u2226"; } |
|---|
| 394 | / "WREATH" { yyValue = "\u2240"; } |
|---|
| 395 | / "BUMPEQ" { yyValue = "\u224F"; } |
|---|
| 396 | / "DOTEQ" { yyValue = "\u2250"; } |
|---|
| 397 | / "DOT" { yyValue = "\u00B7"; } |
|---|
| 398 | / "VDASH" { yyValue = "\u22A2"; } |
|---|
| 399 | / "TURNSTILE" { yyValue = "\u22A2"; } |
|---|
| 400 | / "DASHV" { yyValue = "\u22A3"; } |
|---|
| 401 | / "BIGAND" { yyValue = "\u22C0"; } |
|---|
| 402 | / "ALL" { yyValue = "\u22C0"; } |
|---|
| 403 | / "BIGOR" { yyValue = "\u22C1"; } |
|---|
| 404 | / "ANY" { yyValue = "\u22C1"; } |
|---|
| 405 | / "BIGCAP" { yyValue = "\u22C2"; } |
|---|
| 406 | / "BIGINTERSECT" { yyValue = "\u22C2"; } |
|---|
| 407 | / "BIGCUP" { yyValue = "\u22C3"; } |
|---|
| 408 | / "BIGUNION" { yyValue = "\u22C3"; } |
|---|
| 409 | / "DIAMOND" { yyValue = "\u22C4"; } |
|---|
| 410 | / "STAR" { yyValue = "\u22C6"; } |
|---|
| 411 | / "PERP" { yyValue = "\u27C2"; } |
|---|
| 412 | / "BIGODOT" { yyValue = "\u2A00"; } |
|---|
| 413 | / "BIGOPLUS" { yyValue = "\u2A01"; } |
|---|
| 414 | / "BIGOTIMES" { yyValue = "\u2A02"; } |
|---|
| 415 | / "BIGUDOT" { yyValue = "\u2A03"; } |
|---|
| 416 | / "BIGUPLUS" { yyValue = "\u2A04"; } |
|---|
| 417 | / "BIGSQCAP" { yyValue = "\u2A05"; } |
|---|
| 418 | / "BIGSQCUP" { yyValue = "\u2A06"; } |
|---|
| 419 | / "BIGTIMES" { yyValue = "\u2A09"; } |
|---|
| 420 | / "JOIN" { yyValue = "\u2A1D"; } |
|---|
| 421 | / "EMPTYSET" { yyValue = "\u2205"; } |
|---|
| 422 | / "NOTSUBSETEQ" { yyValue = "\u2288"; } |
|---|
| 423 | / "NOTSUBSET" { yyValue = "\u2284"; } |
|---|
| 424 | / "NOTEQUIV" { yyValue = "\u2262"; } |
|---|
| 425 | / "NOTIN" { yyValue = "\u2209"; } |
|---|
| 426 | / "NOT" { yyValue = "\u00AC"; } |
|---|
| 427 | / "XOR" { yyValue = "\u22BB"; } |
|---|
| 428 | / a1:(!InvalidCharLiteralContent _) { yyValue = String.valueOf(a1); } |
|---|
| 429 | ; |
|---|
| 430 | |
|---|
| 431 | private String InvalidCharLiteralContent = |
|---|
| 432 | a1:[\\\n\f\r\u0009\u000b\u001c\u001d\u001e\u001f"\u201c\u201d\u2028\u2029] |
|---|
| 433 | { log(createSpan(yyStart,yyCount), "Invalid character literal: " + a1); |
|---|
| 434 | yyValue = ""; |
|---|
| 435 | } |
|---|
| 436 | / c:_ &{ Character.getType(c) == Character.CONTROL } |
|---|
| 437 | { log(createSpan(yyStart,yyCount), "Invalid character literal: " + c); |
|---|
| 438 | yyValue = ""; |
|---|
| 439 | }; |
|---|