diff --git a/gen/com/github/themartdev/intellijgleam/lang/parser/GleamParser.java b/gen/com/github/themartdev/intellijgleam/lang/parser/GleamParser.java index 04ce13b..cb7511c 100644 --- a/gen/com/github/themartdev/intellijgleam/lang/parser/GleamParser.java +++ b/gen/com/github/themartdev/intellijgleam/lang/parser/GleamParser.java @@ -260,6 +260,40 @@ private static boolean assignment_1(PsiBuilder b, int l) { return true; } + /* ********************************************************** */ + // BASE_NUMBER_PREFIX BINARY_NUMBER_BASE VALID_BINARY_DIGIT (NUMBER_SEPARATOR VALID_BINARY_DIGIT)* + public static boolean binaryIntegerLiteral(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "binaryIntegerLiteral")) return false; + if (!nextTokenIs(b, BASE_NUMBER_PREFIX)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeTokens(b, 0, BASE_NUMBER_PREFIX, BINARY_NUMBER_BASE, VALID_BINARY_DIGIT); + r = r && binaryIntegerLiteral_3(b, l + 1); + exit_section_(b, m, BINARY_INTEGER_LITERAL, r); + return r; + } + + // (NUMBER_SEPARATOR VALID_BINARY_DIGIT)* + private static boolean binaryIntegerLiteral_3(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "binaryIntegerLiteral_3")) return false; + while (true) { + int c = current_position_(b); + if (!binaryIntegerLiteral_3_0(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "binaryIntegerLiteral_3", c)) break; + } + return true; + } + + // NUMBER_SEPARATOR VALID_BINARY_DIGIT + private static boolean binaryIntegerLiteral_3_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "binaryIntegerLiteral_3_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeTokens(b, 0, NUMBER_SEPARATOR, VALID_BINARY_DIGIT); + exit_section_(b, m, null, r); + return r; + } + /* ********************************************************** */ // EQUAL_EQUAL | NOT_EQUAL | LESS | LESS_EQUAL | LESS_DOT // | LESS_EQUAL_DOT | GREATER | GREATER_EQUAL | GREATER_DOT @@ -311,26 +345,28 @@ public static boolean bitStringNamedSegmentOption(PsiBuilder b, int l) { } /* ********************************************************** */ - // bitStringNamedSegmentOption | INTEGER_LITERAL + // bitStringNamedSegmentOption | wholeNumber public static boolean bitStringSegmentOption(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bitStringSegmentOption")) return false; - if (!nextTokenIs(b, "", IDENTIFIER, INTEGER_LITERAL)) return false; + if (!nextTokenIs(b, "", IDENTIFIER, VALID_DECIMAL_DIGIT)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, BIT_STRING_SEGMENT_OPTION, ""); r = bitStringNamedSegmentOption(b, l + 1); - if (!r) r = consumeToken(b, INTEGER_LITERAL); + if (!r) r = wholeNumber(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ - // IDENTIFIER LPAREN INTEGER_LITERAL RPAREN + // IDENTIFIER LPAREN wholeNumber RPAREN public static boolean bitStringSegmentOptionSize(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bitStringSegmentOptionSize")) return false; if (!nextTokenIs(b, IDENTIFIER)) return false; boolean r; Marker m = enter_section_(b); - r = consumeTokens(b, 0, IDENTIFIER, LPAREN, INTEGER_LITERAL, RPAREN); + r = consumeTokens(b, 0, IDENTIFIER, LPAREN); + r = r && wholeNumber(b, l + 1); + r = r && consumeToken(b, RPAREN); exit_section_(b, m, BIT_STRING_SEGMENT_OPTION_SIZE, r); return r; } @@ -339,7 +375,7 @@ public static boolean bitStringSegmentOptionSize(PsiBuilder b, int l) { // bitStringSegmentOption (MINUS bitStringSegmentOption)* [MINUS] public static boolean bitStringSegmentOptions(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bitStringSegmentOptions")) return false; - if (!nextTokenIs(b, "", IDENTIFIER, INTEGER_LITERAL)) return false; + if (!nextTokenIs(b, "", IDENTIFIER, VALID_DECIMAL_DIGIT)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, BIT_STRING_SEGMENT_OPTIONS, ""); r = bitStringSegmentOption(b, l + 1); @@ -581,13 +617,14 @@ private static boolean caseClausePatterns_2(PsiBuilder b, int l) { } /* ********************************************************** */ - // IDENTIFIER DOT INTEGER_LITERAL + // IDENTIFIER DOT wholeNumber public static boolean caseClauseTupleAccess(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "caseClauseTupleAccess")) return false; if (!nextTokenIs(b, IDENTIFIER)) return false; boolean r; Marker m = enter_section_(b); - r = consumeTokens(b, 0, IDENTIFIER, DOT, INTEGER_LITERAL); + r = consumeTokens(b, 0, IDENTIFIER, DOT); + r = r && wholeNumber(b, l + 1); exit_section_(b, m, CASE_CLAUSE_TUPLE_ACCESS, r); return r; } @@ -1441,6 +1478,18 @@ public static boolean dataConstructors(PsiBuilder b, int l) { return r; } + /* ********************************************************** */ + // wholeNumber + public static boolean decimalIntegerLiteral(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "decimalIntegerLiteral")) return false; + if (!nextTokenIs(b, VALID_DECIMAL_DIGIT)) return false; + boolean r; + Marker m = enter_section_(b); + r = wholeNumber(b, l + 1); + exit_section_(b, m, DECIMAL_INTEGER_LITERAL, r); + return r; + } + /* ********************************************************** */ // DISCARD_NAME public static boolean discard(PsiBuilder b, int l) { @@ -1639,6 +1688,54 @@ private static boolean externalFunctionParameters_1_0_2(PsiBuilder b, int l) { return true; } + /* ********************************************************** */ + // wholeNumber DECIMAL_MARK wholeNumber? (EXPONENT_MARK EXPONENT_SIGN? wholeNumber)? + public static boolean floatLiteral(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "floatLiteral")) return false; + if (!nextTokenIs(b, VALID_DECIMAL_DIGIT)) return false; + boolean r; + Marker m = enter_section_(b); + r = wholeNumber(b, l + 1); + r = r && consumeToken(b, DECIMAL_MARK); + r = r && floatLiteral_2(b, l + 1); + r = r && floatLiteral_3(b, l + 1); + exit_section_(b, m, FLOAT_LITERAL, r); + return r; + } + + // wholeNumber? + private static boolean floatLiteral_2(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "floatLiteral_2")) return false; + wholeNumber(b, l + 1); + return true; + } + + // (EXPONENT_MARK EXPONENT_SIGN? wholeNumber)? + private static boolean floatLiteral_3(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "floatLiteral_3")) return false; + floatLiteral_3_0(b, l + 1); + return true; + } + + // EXPONENT_MARK EXPONENT_SIGN? wholeNumber + private static boolean floatLiteral_3_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "floatLiteral_3_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, EXPONENT_MARK); + r = r && floatLiteral_3_0_1(b, l + 1); + r = r && wholeNumber(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // EXPONENT_SIGN? + private static boolean floatLiteral_3_0_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "floatLiteral_3_0_1")) return false; + consumeToken(b, EXPONENT_SIGN); + return true; + } + /* ********************************************************** */ // [visibilityModifier] FN functionNameDefinition functionParameters [R_ARROW typeBase] functionBody public static boolean function(PsiBuilder b, int l) { @@ -1895,6 +1992,40 @@ private static boolean functionType_1(PsiBuilder b, int l) { return true; } + /* ********************************************************** */ + // BASE_NUMBER_PREFIX HEX_NUMBER_BASE VALID_HEX_DIGIT (NUMBER_SEPARATOR VALID_HEX_DIGIT)* + public static boolean hexIntegerLiteral(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "hexIntegerLiteral")) return false; + if (!nextTokenIs(b, BASE_NUMBER_PREFIX)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeTokens(b, 0, BASE_NUMBER_PREFIX, HEX_NUMBER_BASE, VALID_HEX_DIGIT); + r = r && hexIntegerLiteral_3(b, l + 1); + exit_section_(b, m, HEX_INTEGER_LITERAL, r); + return r; + } + + // (NUMBER_SEPARATOR VALID_HEX_DIGIT)* + private static boolean hexIntegerLiteral_3(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "hexIntegerLiteral_3")) return false; + while (true) { + int c = current_position_(b); + if (!hexIntegerLiteral_3_0(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "hexIntegerLiteral_3", c)) break; + } + return true; + } + + // NUMBER_SEPARATOR VALID_HEX_DIGIT + private static boolean hexIntegerLiteral_3_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "hexIntegerLiteral_3_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeTokens(b, 0, NUMBER_SEPARATOR, VALID_HEX_DIGIT); + exit_section_(b, m, null, r); + return r; + } + /* ********************************************************** */ // DISCARD_NAME public static boolean hole(PsiBuilder b, int l) { @@ -1947,6 +2078,21 @@ private static boolean imports_3(PsiBuilder b, int l) { return true; } + /* ********************************************************** */ + // binaryIntegerLiteral | octalIntegerLiteral | hexIntegerLiteral | decimalIntegerLiteral + public static boolean integerLiteral(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "integerLiteral")) return false; + if (!nextTokenIs(b, "", BASE_NUMBER_PREFIX, VALID_DECIMAL_DIGIT)) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, INTEGER_LITERAL, ""); + r = binaryIntegerLiteral(b, l + 1); + if (!r) r = octalIntegerLiteral(b, l + 1); + if (!r) r = hexIntegerLiteral(b, l + 1); + if (!r) r = decimalIntegerLiteral(b, l + 1); + exit_section_(b, l, m, r, false, null); + return r; + } + /* ********************************************************** */ // IDENTIFIER public static boolean label(PsiBuilder b, int l) { @@ -2130,6 +2276,40 @@ public static boolean nameParam(PsiBuilder b, int l) { return r; } + /* ********************************************************** */ + // BASE_NUMBER_PREFIX OCTAL_NUMBER_BASE VALID_OCTAL_DIGIT (NUMBER_SEPARATOR VALID_OCTAL_DIGIT)* + public static boolean octalIntegerLiteral(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "octalIntegerLiteral")) return false; + if (!nextTokenIs(b, BASE_NUMBER_PREFIX)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeTokens(b, 0, BASE_NUMBER_PREFIX, OCTAL_NUMBER_BASE, VALID_OCTAL_DIGIT); + r = r && octalIntegerLiteral_3(b, l + 1); + exit_section_(b, m, OCTAL_INTEGER_LITERAL, r); + return r; + } + + // (NUMBER_SEPARATOR VALID_OCTAL_DIGIT)* + private static boolean octalIntegerLiteral_3(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "octalIntegerLiteral_3")) return false; + while (true) { + int c = current_position_(b); + if (!octalIntegerLiteral_3_0(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "octalIntegerLiteral_3", c)) break; + } + return true; + } + + // NUMBER_SEPARATOR VALID_OCTAL_DIGIT + private static boolean octalIntegerLiteral_3_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "octalIntegerLiteral_3_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeTokens(b, 0, NUMBER_SEPARATOR, VALID_OCTAL_DIGIT); + exit_section_(b, m, null, r); + return r; + } + /* ********************************************************** */ // OPAQUE public static boolean opacityModifier(PsiBuilder b, int l) { @@ -3285,34 +3465,69 @@ public static boolean visibilityModifier(PsiBuilder b, int l) { return r; } + /* ********************************************************** */ + // VALID_DECIMAL_DIGIT (NUMBER_SEPARATOR VALID_DECIMAL_DIGIT)* + public static boolean wholeNumber(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "wholeNumber")) return false; + if (!nextTokenIs(b, VALID_DECIMAL_DIGIT)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, VALID_DECIMAL_DIGIT); + r = r && wholeNumber_1(b, l + 1); + exit_section_(b, m, WHOLE_NUMBER, r); + return r; + } + + // (NUMBER_SEPARATOR VALID_DECIMAL_DIGIT)* + private static boolean wholeNumber_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "wholeNumber_1")) return false; + while (true) { + int c = current_position_(b); + if (!wholeNumber_1_0(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "wholeNumber_1", c)) break; + } + return true; + } + + // NUMBER_SEPARATOR VALID_DECIMAL_DIGIT + private static boolean wholeNumber_1_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "wholeNumber_1_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeTokens(b, 0, NUMBER_SEPARATOR, VALID_DECIMAL_DIGIT); + exit_section_(b, m, null, r); + return r; + } + /* ********************************************************** */ // Expression root: expression // Operator priority table: // 0: PREFIX(parenthesizedExpr) - // 1: POSTFIX(callExpr) - // 2: POSTFIX(accessExpr) - // 3: BINARY(binaryExpr) - // 4: ATOM(recordExpr) - // 5: ATOM(anonymousFunctionExpr) - // 6: ATOM(referenceExpr) - // 7: ATOM(todoRuleExpr) - // 8: ATOM(tupleExpr) - // 9: ATOM(listExpr) - // 10: ATOM(expressionBitStringExpr) - // 11: ATOM(blockExpr) - // 12: ATOM(caseExpr) - // 13: ATOM(letExpr) - // 14: PREFIX(useExpr) - // 15: ATOM(assertExpr) - // 16: PREFIX(negationExpr) - // 17: PREFIX(recordUpdateExpr) - // 18: ATOM(literalExpr) + // 1: ATOM(literalExpr) + // 2: POSTFIX(callExpr) + // 3: POSTFIX(accessExpr) + // 4: BINARY(binaryExpr) + // 5: ATOM(recordExpr) + // 6: ATOM(anonymousFunctionExpr) + // 7: ATOM(referenceExpr) + // 8: ATOM(todoRuleExpr) + // 9: ATOM(tupleExpr) + // 10: ATOM(listExpr) + // 11: ATOM(expressionBitStringExpr) + // 12: ATOM(blockExpr) + // 13: ATOM(caseExpr) + // 14: ATOM(letExpr) + // 15: PREFIX(useExpr) + // 16: ATOM(assertExpr) + // 17: PREFIX(negationExpr) + // 18: PREFIX(recordUpdateExpr) public static boolean expression(PsiBuilder b, int l, int g) { if (!recursion_guard_(b, l, "expression")) return false; addVariant(b, ""); boolean r, p; Marker m = enter_section_(b, l, _NONE_, ""); r = parenthesizedExpr(b, l + 1); + if (!r) r = literalExpr(b, l + 1); if (!r) r = recordExpr(b, l + 1); if (!r) r = anonymousFunctionExpr(b, l + 1); if (!r) r = referenceExpr(b, l + 1); @@ -3327,7 +3542,6 @@ public static boolean expression(PsiBuilder b, int l, int g) { if (!r) r = assertExpr(b, l + 1); if (!r) r = negationExpr(b, l + 1); if (!r) r = recordUpdateExpr(b, l + 1); - if (!r) r = literalExpr(b, l + 1); p = r; r = r && expression_0(b, l + 1, g); exit_section_(b, l, m, null, r, p, null); @@ -3339,16 +3553,16 @@ public static boolean expression_0(PsiBuilder b, int l, int g) { boolean r = true; while (true) { Marker m = enter_section_(b, l, _LEFT_, null); - if (g < 1 && arguments(b, l + 1)) { + if (g < 2 && arguments(b, l + 1)) { r = true; exit_section_(b, l, m, CALL_EXPR, r, true, null); } - else if (g < 2 && accessExpr_0(b, l + 1)) { + else if (g < 3 && accessExpr_0(b, l + 1)) { r = true; exit_section_(b, l, m, ACCESS_EXPR, r, true, null); } - else if (g < 3 && binaryOperator(b, l + 1)) { - r = expression(b, l, 3); + else if (g < 4 && binaryOperator(b, l + 1)) { + r = expression(b, l, 4); exit_section_(b, l, m, BINARY_EXPR, r, true, null); } else { @@ -3372,6 +3586,19 @@ public static boolean parenthesizedExpr(PsiBuilder b, int l) { return r || p; } + // floatLiteral | stringLiteral | integerLiteral | BOOLEAN_LITERAL + public static boolean literalExpr(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "literalExpr")) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, LITERAL_EXPR, ""); + r = floatLiteral(b, l + 1); + if (!r) r = stringLiteral(b, l + 1); + if (!r) r = integerLiteral(b, l + 1); + if (!r) r = consumeTokenSmart(b, BOOLEAN_LITERAL); + exit_section_(b, l, m, r, false, null); + return r; + } + // DOT label private static boolean accessExpr_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "accessExpr_0")) return false; @@ -3741,7 +3968,7 @@ public static boolean useExpr(PsiBuilder b, int l) { Marker m = enter_section_(b, l, _NONE_, null); r = useExpr_0(b, l + 1); p = r; - r = p && expression(b, l, 14); + r = p && expression(b, l, 15); exit_section_(b, l, m, USE_EXPR, r, p, null); return r || p; } @@ -3784,7 +4011,7 @@ public static boolean negationExpr(PsiBuilder b, int l) { Marker m = enter_section_(b, l, _NONE_, null); r = consumeTokenSmart(b, BANG); p = r; - r = p && expression(b, l, 16); + r = p && expression(b, l, 17); exit_section_(b, l, m, NEGATION_EXPR, r, p, null); return r || p; } @@ -3796,7 +4023,7 @@ public static boolean recordUpdateExpr(PsiBuilder b, int l) { Marker m = enter_section_(b, l, _NONE_, null); r = recordUpdateExpr_0(b, l + 1); p = r; - r = p && expression(b, l, 17); + r = p && expression(b, l, -1); r = p && report_error_(b, recordUpdateExpr_1(b, l + 1)) && r; exit_section_(b, l, m, RECORD_UPDATE_EXPR, r, p, null); return r || p; @@ -3834,17 +4061,4 @@ private static boolean recordUpdateExpr_1(PsiBuilder b, int l) { return r; } - // stringLiteral | INTEGER_LITERAL | FLOAT_LITERAL | BOOLEAN_LITERAL - public static boolean literalExpr(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "literalExpr")) return false; - boolean r; - Marker m = enter_section_(b, l, _NONE_, LITERAL_EXPR, ""); - r = stringLiteral(b, l + 1); - if (!r) r = consumeTokenSmart(b, INTEGER_LITERAL); - if (!r) r = consumeTokenSmart(b, FLOAT_LITERAL); - if (!r) r = consumeTokenSmart(b, BOOLEAN_LITERAL); - exit_section_(b, l, m, r, false, null); - return r; - } - } diff --git a/gen/com/github/themartdev/intellijgleam/lang/parser/_GleamLexer.java b/gen/com/github/themartdev/intellijgleam/lang/parser/_GleamLexer.java index 213f7c1..e6d5c13 100644 --- a/gen/com/github/themartdev/intellijgleam/lang/parser/_GleamLexer.java +++ b/gen/com/github/themartdev/intellijgleam/lang/parser/_GleamLexer.java @@ -24,6 +24,15 @@ public class _GleamLexer implements FlexLexer { public static final int ESCAPE_SEQUENCE = 4; public static final int UNICODE_ESCAPE_SEQUENCE = 6; public static final int UNICODE_CODEPOINT_SEQUENCE = 8; + public static final int DECIMAL_NUMBER = 10; + public static final int BASE_NUMBER_BASE = 12; + public static final int BINARY_NUMBER = 14; + public static final int HEX_NUMBER = 16; + public static final int OCTAL_NUMBER = 18; + public static final int UNKNOWN_BASE_NUMBER = 20; + public static final int DECIMAL_FRACTION = 22; + public static final int DECIMAL_EXPONENT = 24; + public static final int DECIMAL_EXPONENT_SIGN = 26; /** * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l @@ -32,7 +41,8 @@ public class _GleamLexer implements FlexLexer { * l is of the form l = 2*k, k a non negative integer */ private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, + 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; /** @@ -73,13 +83,13 @@ private static int zzUnpackcmap_top(String packed, int offset, int [] result) { "\1\6\1\7\1\10\1\0\1\11\1\12\1\0\1\13"+ "\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23"+ "\1\24\6\25\2\26\1\27\1\0\1\30\1\31\1\32"+ - "\2\0\1\33\1\34\2\33\1\35\1\36\10\37\1\40"+ - "\4\37\1\41\3\37\1\42\2\37\1\43\1\44\1\45"+ - "\1\0\1\46\1\0\1\47\1\50\1\51\1\52\1\53"+ - "\1\54\1\55\1\56\1\57\2\60\1\61\1\62\1\63"+ - "\1\64\1\65\1\66\1\67\1\70\1\71\1\72\1\73"+ - "\1\60\1\74\1\75\1\60\1\76\1\77\1\100\7\0"+ - "\1\3\u01a2\0\2\3\326\0\u0100\3"; + "\2\0\1\33\1\34\3\33\1\35\10\36\1\37\4\36"+ + "\1\40\3\36\1\41\2\36\1\42\1\43\1\44\1\0"+ + "\1\45\1\0\1\46\1\47\1\50\1\51\1\52\1\53"+ + "\1\54\1\55\1\56\2\57\1\60\1\61\1\62\1\63"+ + "\1\64\1\65\1\66\1\67\1\70\1\71\1\72\1\57"+ + "\1\73\1\74\1\57\1\75\1\76\1\77\7\0\1\3"+ + "\u01a2\0\2\3\326\0\u0100\3"; private static int [] zzUnpackcmap_blocks() { int [] result = new int[1024]; @@ -106,25 +116,26 @@ private static int zzUnpackcmap_blocks(String packed, int offset, int [] result) private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\1\0\1\1\3\0\1\2\1\3\1\4\1\5\1\6"+ + "\1\0\1\1\14\0\1\2\1\3\1\4\1\5\1\6"+ "\1\7\1\2\1\10\1\11\1\12\1\13\1\14\1\15"+ "\1\16\1\17\2\20\1\21\1\22\1\23\1\24\3\25"+ "\1\26\1\27\1\30\15\31\1\32\1\33\1\34\1\1"+ "\1\35\1\36\1\37\1\40\1\2\1\41\1\42\1\43"+ "\1\44\1\45\1\46\1\47\1\50\1\51\1\52\1\53"+ - "\1\54\1\55\1\56\5\0\1\57\1\60\1\61\1\62"+ - "\1\63\1\64\1\65\1\66\1\67\2\25\1\70\7\31"+ - "\1\71\1\72\13\31\1\73\1\74\1\44\1\56\1\75"+ - "\1\76\1\20\1\0\1\76\2\20\1\77\1\100\2\25"+ - "\12\31\1\101\3\31\1\102\2\31\1\103\1\31\1\104"+ - "\1\44\1\75\1\105\1\106\1\31\1\107\1\110\3\31"+ - "\1\111\1\112\6\31\1\113\1\114\1\115\1\44\1\31"+ - "\1\116\5\31\1\117\1\31\1\120\1\44\1\121\1\31"+ - "\1\122\2\31\1\123\1\124\1\44\3\31\1\125\1\126"+ - "\1\31\1\127"; + "\1\54\1\55\1\56\2\57\1\60\1\61\1\62\1\63"+ + "\1\64\1\65\1\66\1\67\1\70\1\71\1\72\1\73"+ + "\1\74\1\75\1\76\1\77\1\100\1\101\1\102\1\103"+ + "\1\104\1\105\1\106\1\107\1\110\1\111\1\112\1\113"+ + "\2\25\1\114\7\31\1\115\1\116\13\31\1\117\1\120"+ + "\1\44\1\101\1\121\1\122\1\123\2\25\12\31\1\124"+ + "\3\31\1\125\2\31\1\126\1\31\1\127\1\44\1\121"+ + "\1\130\1\131\1\31\1\132\1\133\3\31\1\134\1\135"+ + "\6\31\1\136\1\137\1\140\1\44\1\31\1\141\5\31"+ + "\1\142\1\31\1\143\1\44\1\144\1\31\1\145\2\31"+ + "\1\146\1\147\1\44\3\31\1\150\1\151\1\31\1\152"; private static int [] zzUnpackAction() { - int [] result = new int[188]; + int [] result = new int[207]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -149,33 +160,35 @@ private static int zzUnpackAction(String packed, int offset, int [] result) { private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\101\0\202\0\303\0\u0104\0\u0145\0\u0186\0\u01c7"+ - "\0\u0145\0\u0145\0\u0145\0\u0208\0\u0145\0\u0145\0\u0249\0\u028a"+ - "\0\u0145\0\u02cb\0\u030c\0\u034d\0\u038e\0\u03cf\0\u0145\0\u0410"+ - "\0\u0451\0\u0492\0\u04d3\0\u0514\0\u0555\0\u0145\0\u0145\0\u0596"+ - "\0\u05d7\0\u0618\0\u0659\0\u069a\0\u06db\0\u071c\0\u075d\0\u079e"+ - "\0\u07df\0\u0820\0\u0861\0\u08a2\0\u08e3\0\u0145\0\u0924\0\u0145"+ - "\0\u0965\0\u0145\0\u0145\0\u0145\0\u0145\0\u09a6\0\u0145\0\u0145"+ - "\0\u0145\0\u09e7\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145"+ - "\0\u0145\0\u0145\0\u0145\0\u0a28\0\u0a69\0\u0aaa\0\u0aeb\0\u0b2c"+ - "\0\u0b6d\0\u0145\0\u0145\0\u0145\0\u0bae\0\u0145\0\u0145\0\u0145"+ - "\0\u0bef\0\u0145\0\u0c30\0\u0c71\0\u0cb2\0\u0cf3\0\u0d34\0\u0d75"+ - "\0\u0db6\0\u0df7\0\u0e38\0\u0e79\0\u0618\0\u0618\0\u0eba\0\u0efb"+ - "\0\u0f3c\0\u0f7d\0\u0fbe\0\u0fff\0\u1040\0\u1081\0\u10c2\0\u1103"+ - "\0\u1144\0\u0145\0\u0145\0\u1185\0\u11c6\0\u1207\0\u1248\0\u0aaa"+ - "\0\u1289\0\u1289\0\u0b2c\0\u0b6d\0\u0145\0\u0145\0\u12ca\0\u130b"+ - "\0\u134c\0\u138d\0\u13ce\0\u140f\0\u1450\0\u1491\0\u14d2\0\u1513"+ - "\0\u1554\0\u1595\0\u0618\0\u15d6\0\u1617\0\u1658\0\u0618\0\u1699"+ - "\0\u16da\0\u0618\0\u171b\0\u0618\0\u175c\0\u179d\0\u17de\0\u04d3"+ - "\0\u181f\0\u0618\0\u0618\0\u1860\0\u18a1\0\u18e2\0\u0618\0\u0618"+ - "\0\u1923\0\u1964\0\u19a5\0\u19e6\0\u1a27\0\u1a68\0\u0618\0\u0618"+ - "\0\u0618\0\u1aa9\0\u1aea\0\u0618\0\u1b2b\0\u1b6c\0\u1bad\0\u1bee"+ - "\0\u1c2f\0\u0618\0\u1c70\0\u0618\0\u1cb1\0\u0618\0\u1cf2\0\u0618"+ - "\0\u1d33\0\u1d74\0\u0618\0\u0618\0\u0145\0\u1db5\0\u1df6\0\u1e37"+ - "\0\u0618\0\u0618\0\u1e78\0\u0618"; + "\0\0\0\100\0\200\0\300\0\u0100\0\u0140\0\u0180\0\u01c0"+ + "\0\u0200\0\u0240\0\u0280\0\u02c0\0\u0300\0\u0340\0\u0380\0\u03c0"+ + "\0\u0400\0\u0380\0\u0380\0\u0380\0\u0440\0\u0380\0\u0380\0\u0480"+ + "\0\u04c0\0\u0380\0\u0500\0\u0540\0\u0580\0\u05c0\0\u0600\0\u0380"+ + "\0\u0640\0\u0680\0\u06c0\0\u0700\0\u0740\0\u0780\0\u0380\0\u0380"+ + "\0\u07c0\0\u0800\0\u0840\0\u0880\0\u08c0\0\u0900\0\u0940\0\u0980"+ + "\0\u09c0\0\u0a00\0\u0a40\0\u0a80\0\u0ac0\0\u0b00\0\u0380\0\u0b40"+ + "\0\u0380\0\u0b80\0\u0380\0\u0380\0\u0380\0\u0380\0\u0bc0\0\u0380"+ + "\0\u0380\0\u0380\0\u0c00\0\u0380\0\u0380\0\u0380\0\u0c40\0\u0c80"+ + "\0\u0380\0\u0380\0\u0380\0\u0380\0\u0380\0\u0cc0\0\u0d00\0\u0d40"+ + "\0\u0d80\0\u0dc0\0\u0e00\0\u0e40\0\u0e80\0\u0c80\0\u0380\0\u0380"+ + "\0\u0380\0\u0380\0\u0380\0\u0380\0\u0380\0\u0380\0\u0380\0\u0380"+ + "\0\u0ec0\0\u0380\0\u0380\0\u0380\0\u0380\0\u0f00\0\u0380\0\u0380"+ + "\0\u0380\0\u0f40\0\u0380\0\u0f80\0\u0fc0\0\u1000\0\u1040\0\u1080"+ + "\0\u10c0\0\u1100\0\u1140\0\u1180\0\u11c0\0\u0840\0\u0840\0\u1200"+ + "\0\u1240\0\u1280\0\u12c0\0\u1300\0\u1340\0\u1380\0\u13c0\0\u1400"+ + "\0\u1440\0\u1480\0\u0380\0\u0380\0\u14c0\0\u1500\0\u1540\0\u0380"+ + "\0\u0380\0\u1580\0\u15c0\0\u1600\0\u1640\0\u1680\0\u16c0\0\u1700"+ + "\0\u1740\0\u1780\0\u17c0\0\u1800\0\u1840\0\u0840\0\u1880\0\u18c0"+ + "\0\u1900\0\u0840\0\u1940\0\u1980\0\u0840\0\u19c0\0\u0840\0\u1a00"+ + "\0\u1a40\0\u1a80\0\u0700\0\u1ac0\0\u0840\0\u0840\0\u1b00\0\u1b40"+ + "\0\u1b80\0\u0840\0\u0840\0\u1bc0\0\u1c00\0\u1c40\0\u1c80\0\u1cc0"+ + "\0\u1d00\0\u0840\0\u0840\0\u0840\0\u1d40\0\u1d80\0\u0840\0\u1dc0"+ + "\0\u1e00\0\u1e40\0\u1e80\0\u1ec0\0\u0840\0\u1f00\0\u0840\0\u1f40"+ + "\0\u0840\0\u1f80\0\u0840\0\u1fc0\0\u2000\0\u0840\0\u0840\0\u0380"+ + "\0\u2040\0\u2080\0\u20c0\0\u0840\0\u0840\0\u2100\0\u0840"; private static int [] zzUnpackRowMap() { - int [] result = new int[188]; + int [] result = new int[207]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -198,122 +211,131 @@ private static int zzUnpackRowMap(String packed, int offset, int [] result) { private static final int [] ZZ_TRANS = zzUnpacktrans(); private static final String ZZ_TRANS_PACKED_0 = - "\1\6\2\7\1\6\2\7\1\10\1\11\1\12\1\13"+ - "\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23"+ - "\1\24\1\25\3\26\1\27\1\30\1\31\1\32\3\33"+ - "\1\34\2\33\1\35\1\33\1\36\1\6\1\37\1\40"+ - "\1\41\1\42\1\43\1\44\1\45\1\46\2\42\1\47"+ - "\1\42\1\50\1\51\1\42\1\52\1\53\3\42\1\54"+ - "\1\55\3\42\1\56\1\57\1\60\7\61\1\62\34\61"+ - "\1\63\34\61\2\64\1\65\2\6\1\66\64\64\1\67"+ - "\6\64\2\70\4\6\70\70\1\71\2\70\23\6\4\72"+ - "\4\6\4\72\10\6\6\72\23\6\1\73\102\0\2\7"+ - "\1\0\2\7\124\0\1\74\61\0\1\75\107\0\1\76"+ - "\100\0\1\77\100\0\1\100\1\0\1\25\3\26\3\0"+ - "\1\101\67\0\1\102\100\0\1\103\1\104\77\0\1\105"+ - "\1\0\4\26\5\0\1\106\1\107\2\0\1\110\1\0"+ - "\1\111\3\0\1\26\1\0\1\106\2\0\1\107\10\0"+ - "\1\110\7\0\1\111\25\0\1\105\1\0\4\26\6\0"+ - "\1\107\10\0\1\26\4\0\1\107\45\0\1\112\1\113"+ - "\6\0\1\114\1\115\1\116\77\0\1\117\70\0\1\120"+ - "\7\0\1\121\1\122\71\0\4\33\4\0\10\33\3\0"+ - "\30\33\26\0\4\33\4\0\10\33\3\0\1\33\1\123"+ - "\26\33\26\0\4\33\4\0\10\33\3\0\21\33\1\124"+ - "\6\33\26\0\4\40\4\0\10\42\3\0\30\40\26\0"+ - "\4\42\4\0\10\42\3\0\22\42\1\125\1\42\1\126"+ - "\3\42\26\0\4\42\4\0\10\42\3\0\30\42\26\0"+ - "\4\42\4\0\10\42\3\0\1\42\1\127\14\42\1\130"+ - "\11\42\26\0\4\42\4\0\10\42\3\0\5\42\1\131"+ - "\22\42\26\0\4\42\4\0\10\42\3\0\3\42\1\132"+ - "\7\42\1\133\12\42\1\134\1\42\26\0\4\42\4\0"+ - "\10\42\3\0\15\42\1\135\12\42\26\0\4\42\4\0"+ - "\10\42\3\0\6\42\1\136\5\42\1\137\13\42\26\0"+ - "\4\42\4\0\10\42\3\0\5\42\1\140\22\42\26\0"+ - "\4\42\4\0\10\42\3\0\1\42\1\141\26\42\26\0"+ - "\4\42\4\0\10\42\3\0\17\42\1\142\10\42\26\0"+ - "\4\42\4\0\10\42\3\0\1\42\1\143\22\42\1\144"+ - "\3\42\26\0\4\42\4\0\10\42\3\0\5\42\1\145"+ - "\10\42\1\146\2\42\1\147\5\42\1\150\26\0\4\42"+ - "\4\0\10\42\3\0\22\42\1\151\5\42\35\0\1\152"+ - "\44\0\1\153\1\0\7\61\1\0\34\61\1\0\34\61"+ - "\2\0\1\65\121\0\4\154\4\0\4\154\10\0\6\154"+ - "\24\0\2\155\1\0\17\155\1\156\56\155\23\0\4\157"+ - "\17\0\1\157\55\0\2\160\21\0\1\160\50\0\1\161"+ - "\1\0\1\161\2\0\4\162\75\0\3\163\20\0\1\163"+ - "\55\0\4\164\4\0\4\164\7\0\7\164\45\0\1\165"+ - "\100\0\1\166\102\0\4\33\4\0\10\33\3\0\13\33"+ - "\1\167\14\33\26\0\4\33\4\0\10\33\3\0\24\33"+ - "\1\170\3\33\26\0\4\42\4\0\10\42\3\0\22\42"+ - "\1\171\5\42\26\0\4\42\4\0\10\42\3\0\23\42"+ - "\1\172\4\42\26\0\4\42\4\0\10\42\3\0\22\42"+ - "\1\173\5\42\26\0\4\42\4\0\10\42\3\0\15\42"+ - "\1\174\12\42\26\0\4\42\4\0\10\42\3\0\13\42"+ - "\1\175\5\42\1\176\6\42\26\0\4\42\4\0\10\42"+ - "\3\0\10\42\1\177\17\42\26\0\4\42\4\0\10\42"+ - "\3\0\22\42\1\200\5\42\26\0\4\42\4\0\10\42"+ - "\3\0\23\42\1\201\4\42\26\0\4\42\4\0\10\42"+ - "\3\0\17\42\1\202\10\42\26\0\4\42\4\0\10\42"+ - "\3\0\23\42\1\203\4\42\26\0\4\42\4\0\10\42"+ - "\3\0\3\42\1\204\24\42\26\0\4\42\4\0\10\42"+ - "\3\0\1\42\1\205\26\42\26\0\4\42\4\0\10\42"+ - "\3\0\15\42\1\206\12\42\26\0\4\42\4\0\10\42"+ - "\3\0\2\42\1\207\25\42\26\0\4\42\4\0\10\42"+ - "\3\0\22\42\1\210\5\42\26\0\4\42\4\0\10\42"+ - "\3\0\4\42\1\211\23\42\26\0\4\42\4\0\10\42"+ - "\3\0\27\42\1\212\26\0\4\42\4\0\10\42\3\0"+ - "\17\42\1\213\10\42\26\0\4\42\4\0\10\42\3\0"+ - "\5\42\1\214\22\42\26\0\4\215\4\0\4\215\10\0"+ - "\6\215\24\0\2\155\1\0\76\155\2\216\1\0\17\216"+ - "\1\217\56\216\23\0\4\157\6\0\1\107\10\0\1\157"+ - "\4\0\1\107\50\0\4\162\75\0\4\33\4\0\10\33"+ - "\3\0\22\33\1\170\5\33\26\0\4\33\4\0\10\33"+ - "\3\0\5\33\1\220\22\33\26\0\4\42\4\0\10\42"+ - "\3\0\5\42\1\221\22\42\26\0\4\42\4\0\10\42"+ - "\3\0\16\42\1\222\11\42\26\0\4\42\4\0\10\42"+ - "\3\0\5\42\1\223\22\42\26\0\4\42\4\0\10\42"+ - "\3\0\22\42\1\224\5\42\26\0\4\42\4\0\10\42"+ - "\3\0\5\42\1\225\22\42\26\0\4\42\4\0\10\42"+ - "\3\0\11\42\1\226\16\42\26\0\4\42\4\0\10\42"+ - "\3\0\16\42\1\227\11\42\26\0\4\42\4\0\10\42"+ - "\3\0\5\42\1\230\22\42\26\0\4\42\4\0\10\42"+ - "\3\0\5\42\1\231\22\42\26\0\4\42\4\0\10\42"+ - "\3\0\13\42\1\232\2\42\1\233\11\42\26\0\4\42"+ - "\4\0\10\42\3\0\21\42\1\234\6\42\26\0\4\42"+ - "\4\0\10\42\3\0\20\42\1\235\7\42\26\0\4\42"+ - "\4\0\10\42\3\0\11\42\1\236\16\42\26\0\4\42"+ - "\4\0\10\42\3\0\23\42\1\237\4\42\26\0\4\42"+ - "\4\0\10\42\3\0\16\42\1\240\11\42\26\0\4\42"+ - "\4\0\10\42\3\0\5\42\1\241\22\42\26\0\4\242"+ - "\4\0\4\242\10\0\6\242\24\0\2\216\1\0\76\216"+ - "\2\217\1\0\76\217\23\0\4\42\4\0\10\42\3\0"+ - "\21\42\1\243\6\42\26\0\4\42\4\0\10\42\3\0"+ - "\23\42\1\244\4\42\26\0\4\42\4\0\10\42\3\0"+ - "\7\42\1\245\20\42\26\0\4\42\4\0\10\42\3\0"+ - "\25\42\1\246\2\42\26\0\4\42\4\0\10\42\3\0"+ - "\21\42\1\247\6\42\26\0\4\42\4\0\10\42\3\0"+ - "\5\42\1\250\22\42\26\0\4\42\4\0\10\42\3\0"+ - "\21\42\1\251\6\42\26\0\4\42\4\0\10\42\3\0"+ - "\16\42\1\252\11\42\26\0\4\42\4\0\10\42\3\0"+ - "\24\42\1\253\3\42\26\0\4\42\4\0\10\42\3\0"+ - "\3\42\1\254\24\42\26\0\4\255\4\0\4\255\10\0"+ - "\6\255\47\0\4\42\4\0\10\42\3\0\23\42\1\256"+ - "\4\42\26\0\4\42\4\0\10\42\3\0\1\42\1\257"+ - "\26\42\26\0\4\42\4\0\10\42\3\0\5\42\1\260"+ - "\22\42\26\0\4\42\4\0\10\42\3\0\15\42\1\261"+ - "\12\42\26\0\4\42\4\0\10\42\3\0\14\42\1\262"+ - "\13\42\26\0\4\42\4\0\10\42\3\0\23\42\1\263"+ - "\4\42\26\0\4\42\4\0\10\42\3\0\5\42\1\264"+ - "\22\42\26\0\4\265\4\0\4\265\10\0\6\265\47\0"+ - "\4\42\4\0\10\42\3\0\23\42\1\266\4\42\26\0"+ - "\4\42\4\0\10\42\3\0\1\42\1\267\26\42\26\0"+ - "\4\42\4\0\10\42\3\0\5\42\1\270\22\42\26\0"+ - "\4\42\4\0\10\42\3\0\5\42\1\271\22\42\26\0"+ - "\4\42\4\0\10\42\3\0\13\42\1\272\14\42\26\0"+ - "\4\42\4\0\10\42\3\0\15\42\1\273\12\42\26\0"+ - "\4\42\4\0\10\42\3\0\23\42\1\274\4\42\3\0"; + "\1\17\2\20\1\17\2\20\1\21\1\22\1\23\1\24"+ + "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+ + "\1\35\1\36\3\37\1\40\1\41\1\42\1\43\2\44"+ + "\1\45\2\44\1\46\1\44\1\47\1\17\1\50\1\51"+ + "\1\52\1\53\1\54\1\55\1\56\1\57\2\53\1\60"+ + "\1\53\1\61\1\62\1\53\1\63\1\64\3\53\1\65"+ + "\1\66\3\53\1\67\1\70\1\71\7\72\1\73\33\72"+ + "\1\74\34\72\2\75\1\76\2\17\1\77\63\75\1\100"+ + "\6\75\2\101\4\17\67\101\1\102\2\101\23\17\4\103"+ + "\4\17\3\103\10\17\6\103\23\17\1\104\21\105\1\106"+ + "\1\105\4\107\4\105\7\110\3\105\1\111\27\110\3\105"+ + "\33\17\1\112\1\113\2\112\1\114\1\112\1\115\4\17"+ + "\1\112\1\113\13\112\1\114\7\112\1\115\1\112\3\17"+ + "\23\105\1\116\1\117\2\120\4\105\7\120\3\105\1\111"+ + "\27\120\26\105\4\121\4\105\3\121\4\122\3\105\1\111"+ + "\6\121\21\122\26\105\3\123\1\124\4\105\7\124\3\105"+ + "\1\111\27\124\26\105\4\125\4\105\7\125\3\105\1\111"+ + "\27\125\26\105\4\107\4\105\7\110\3\105\1\111\4\110"+ + "\1\126\22\110\26\105\4\107\4\105\7\110\3\105\1\111"+ + "\27\110\3\105\16\127\1\130\1\127\1\130\57\127\101\0"+ + "\2\20\1\0\2\20\123\0\1\131\60\0\1\132\106\0"+ + "\1\133\77\0\1\134\77\0\1\135\10\0\1\136\66\0"+ + "\1\137\77\0\1\140\1\141\100\0\4\37\4\0\7\142"+ + "\4\0\27\142\26\0\4\37\71\0\1\143\1\144\6\0"+ + "\1\145\1\146\1\147\76\0\1\150\67\0\1\151\7\0"+ + "\1\152\1\153\70\0\4\44\4\0\7\44\3\0\30\44"+ + "\26\0\4\44\4\0\7\44\3\0\1\44\1\154\26\44"+ + "\26\0\4\44\4\0\7\44\3\0\21\44\1\155\6\44"+ + "\26\0\4\51\4\0\7\53\3\0\30\51\26\0\4\53"+ + "\4\0\7\53\3\0\22\53\1\156\1\53\1\157\3\53"+ + "\26\0\4\53\4\0\7\53\3\0\30\53\26\0\4\53"+ + "\4\0\7\53\3\0\1\53\1\160\14\53\1\161\11\53"+ + "\26\0\4\53\4\0\7\53\3\0\5\53\1\162\22\53"+ + "\26\0\4\53\4\0\7\53\3\0\3\53\1\163\7\53"+ + "\1\164\12\53\1\165\1\53\26\0\4\53\4\0\7\53"+ + "\3\0\15\53\1\166\12\53\26\0\4\53\4\0\7\53"+ + "\3\0\6\53\1\167\5\53\1\170\13\53\26\0\4\53"+ + "\4\0\7\53\3\0\5\53\1\171\22\53\26\0\4\53"+ + "\4\0\7\53\3\0\1\53\1\172\26\53\26\0\4\53"+ + "\4\0\7\53\3\0\17\53\1\173\10\53\26\0\4\53"+ + "\4\0\7\53\3\0\1\53\1\174\22\53\1\175\3\53"+ + "\26\0\4\53\4\0\7\53\3\0\5\53\1\176\10\53"+ + "\1\177\2\53\1\200\5\53\1\201\26\0\4\53\4\0"+ + "\7\53\3\0\22\53\1\202\5\53\35\0\1\203\43\0"+ + "\1\204\1\0\7\72\1\0\33\72\1\0\34\72\2\0"+ + "\1\76\120\0\4\205\4\0\3\205\10\0\6\205\47\0"+ + "\4\107\104\0\7\110\4\0\27\110\26\0\2\116\76\0"+ + "\1\116\1\117\2\120\4\0\7\120\4\0\27\120\27\0"+ + "\3\120\4\0\7\120\4\0\27\120\26\0\4\121\4\0"+ + "\3\121\10\0\6\121\62\0\4\122\12\0\21\122\26\0"+ + "\3\123\100\0\1\124\4\0\7\124\4\0\27\124\26\0"+ + "\4\125\4\0\7\125\4\0\27\125\3\0\2\206\1\0"+ + "\17\206\1\207\55\206\21\0\1\210\77\0\1\211\101\0"+ + "\4\44\4\0\7\44\3\0\13\44\1\212\14\44\26\0"+ + "\4\44\4\0\7\44\3\0\24\44\1\213\3\44\26\0"+ + "\4\53\4\0\7\53\3\0\22\53\1\214\5\53\26\0"+ + "\4\53\4\0\7\53\3\0\23\53\1\215\4\53\26\0"+ + "\4\53\4\0\7\53\3\0\22\53\1\216\5\53\26\0"+ + "\4\53\4\0\7\53\3\0\15\53\1\217\12\53\26\0"+ + "\4\53\4\0\7\53\3\0\13\53\1\220\5\53\1\221"+ + "\6\53\26\0\4\53\4\0\7\53\3\0\10\53\1\222"+ + "\17\53\26\0\4\53\4\0\7\53\3\0\22\53\1\223"+ + "\5\53\26\0\4\53\4\0\7\53\3\0\23\53\1\224"+ + "\4\53\26\0\4\53\4\0\7\53\3\0\17\53\1\225"+ + "\10\53\26\0\4\53\4\0\7\53\3\0\23\53\1\226"+ + "\4\53\26\0\4\53\4\0\7\53\3\0\3\53\1\227"+ + "\24\53\26\0\4\53\4\0\7\53\3\0\1\53\1\230"+ + "\26\53\26\0\4\53\4\0\7\53\3\0\15\53\1\231"+ + "\12\53\26\0\4\53\4\0\7\53\3\0\2\53\1\232"+ + "\25\53\26\0\4\53\4\0\7\53\3\0\22\53\1\233"+ + "\5\53\26\0\4\53\4\0\7\53\3\0\4\53\1\234"+ + "\23\53\26\0\4\53\4\0\7\53\3\0\27\53\1\235"+ + "\26\0\4\53\4\0\7\53\3\0\17\53\1\236\10\53"+ + "\26\0\4\53\4\0\7\53\3\0\5\53\1\237\22\53"+ + "\26\0\4\240\4\0\3\240\10\0\6\240\24\0\2\206"+ + "\1\0\75\206\2\241\1\0\17\241\1\242\55\241\23\0"+ + "\4\44\4\0\7\44\3\0\22\44\1\213\5\44\26\0"+ + "\4\44\4\0\7\44\3\0\5\44\1\243\22\44\26\0"+ + "\4\53\4\0\7\53\3\0\5\53\1\244\22\53\26\0"+ + "\4\53\4\0\7\53\3\0\16\53\1\245\11\53\26\0"+ + "\4\53\4\0\7\53\3\0\5\53\1\246\22\53\26\0"+ + "\4\53\4\0\7\53\3\0\22\53\1\247\5\53\26\0"+ + "\4\53\4\0\7\53\3\0\5\53\1\250\22\53\26\0"+ + "\4\53\4\0\7\53\3\0\11\53\1\251\16\53\26\0"+ + "\4\53\4\0\7\53\3\0\16\53\1\252\11\53\26\0"+ + "\4\53\4\0\7\53\3\0\5\53\1\253\22\53\26\0"+ + "\4\53\4\0\7\53\3\0\5\53\1\254\22\53\26\0"+ + "\4\53\4\0\7\53\3\0\13\53\1\255\2\53\1\256"+ + "\11\53\26\0\4\53\4\0\7\53\3\0\21\53\1\257"+ + "\6\53\26\0\4\53\4\0\7\53\3\0\20\53\1\260"+ + "\7\53\26\0\4\53\4\0\7\53\3\0\11\53\1\261"+ + "\16\53\26\0\4\53\4\0\7\53\3\0\23\53\1\262"+ + "\4\53\26\0\4\53\4\0\7\53\3\0\16\53\1\263"+ + "\11\53\26\0\4\53\4\0\7\53\3\0\5\53\1\264"+ + "\22\53\26\0\4\265\4\0\3\265\10\0\6\265\24\0"+ + "\2\241\1\0\75\241\2\242\1\0\75\242\23\0\4\53"+ + "\4\0\7\53\3\0\21\53\1\266\6\53\26\0\4\53"+ + "\4\0\7\53\3\0\23\53\1\267\4\53\26\0\4\53"+ + "\4\0\7\53\3\0\7\53\1\270\20\53\26\0\4\53"+ + "\4\0\7\53\3\0\25\53\1\271\2\53\26\0\4\53"+ + "\4\0\7\53\3\0\21\53\1\272\6\53\26\0\4\53"+ + "\4\0\7\53\3\0\5\53\1\273\22\53\26\0\4\53"+ + "\4\0\7\53\3\0\21\53\1\274\6\53\26\0\4\53"+ + "\4\0\7\53\3\0\16\53\1\275\11\53\26\0\4\53"+ + "\4\0\7\53\3\0\24\53\1\276\3\53\26\0\4\53"+ + "\4\0\7\53\3\0\3\53\1\277\24\53\26\0\4\300"+ + "\4\0\3\300\10\0\6\300\47\0\4\53\4\0\7\53"+ + "\3\0\23\53\1\301\4\53\26\0\4\53\4\0\7\53"+ + "\3\0\1\53\1\302\26\53\26\0\4\53\4\0\7\53"+ + "\3\0\5\53\1\303\22\53\26\0\4\53\4\0\7\53"+ + "\3\0\15\53\1\304\12\53\26\0\4\53\4\0\7\53"+ + "\3\0\14\53\1\305\13\53\26\0\4\53\4\0\7\53"+ + "\3\0\23\53\1\306\4\53\26\0\4\53\4\0\7\53"+ + "\3\0\5\53\1\307\22\53\26\0\4\310\4\0\3\310"+ + "\10\0\6\310\47\0\4\53\4\0\7\53\3\0\23\53"+ + "\1\311\4\53\26\0\4\53\4\0\7\53\3\0\1\53"+ + "\1\312\26\53\26\0\4\53\4\0\7\53\3\0\5\53"+ + "\1\313\22\53\26\0\4\53\4\0\7\53\3\0\5\53"+ + "\1\314\22\53\26\0\4\53\4\0\7\53\3\0\13\53"+ + "\1\315\14\53\26\0\4\53\4\0\7\53\3\0\15\53"+ + "\1\316\12\53\26\0\4\53\4\0\7\53\3\0\23\53"+ + "\1\317\4\53\3\0"; private static int [] zzUnpacktrans() { - int [] result = new int[7865]; + int [] result = new int[8512]; int offset = 0; offset = zzUnpacktrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -351,14 +373,15 @@ private static int zzUnpacktrans(String packed, int offset, int [] result) { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\0\1\1\3\0\1\11\2\1\3\11\1\1\2\11"+ + "\1\0\1\1\14\0\1\11\2\1\3\11\1\1\2\11"+ "\2\1\1\11\5\1\1\11\6\1\2\11\16\1\1\11"+ - "\1\1\1\11\1\1\4\11\1\1\3\11\1\1\11\11"+ - "\1\1\5\0\3\11\1\1\3\11\1\1\1\11\27\1"+ - "\2\11\5\1\1\0\3\1\2\11\76\1\1\11\7\1"; + "\1\1\1\11\1\1\4\11\1\1\3\11\1\1\3\11"+ + "\2\1\5\11\11\1\12\11\1\1\4\11\1\1\3\11"+ + "\1\1\1\11\27\1\2\11\3\1\2\11\76\1\1\11"+ + "\7\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[188]; + int [] result = new int[207]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -706,437 +729,535 @@ else if (zzAtEOF) { { return GleamTypes.REGULAR_STRING_PART; } // fall through - case 88: break; + case 107: break; case 2: { return TokenType.BAD_CHARACTER; } // fall through - case 89: break; + case 108: break; case 3: { return TokenType.WHITE_SPACE; } // fall through - case 90: break; + case 109: break; case 4: { return GleamTypes.BANG; } // fall through - case 91: break; + case 110: break; case 5: { pushState(IN_STRING); return GleamTypes.OPEN_QUOTE; } // fall through - case 92: break; + case 111: break; case 6: { return GleamTypes.HASH; } // fall through - case 93: break; + case 112: break; case 7: { return GleamTypes.PERCENT; } // fall through - case 94: break; + case 113: break; case 8: { return GleamTypes.LPAREN; } // fall through - case 95: break; + case 114: break; case 9: { return GleamTypes.RPAREN; } // fall through - case 96: break; + case 115: break; case 10: { return GleamTypes.STAR; } // fall through - case 97: break; + case 116: break; case 11: { return GleamTypes.PLUS; } // fall through - case 98: break; + case 117: break; case 12: { return GleamTypes.COMMA; } // fall through - case 99: break; + case 118: break; case 13: { return GleamTypes.MINUS; } // fall through - case 100: break; + case 119: break; case 14: { return GleamTypes.DOT; } // fall through - case 101: break; + case 120: break; case 15: { return GleamTypes.SLASH; } // fall through - case 102: break; + case 121: break; case 16: - { return GleamTypes.INTEGER_LITERAL; + { pushState(DECIMAL_NUMBER); return GleamTypes.VALID_DECIMAL_DIGIT; } // fall through - case 103: break; + case 122: break; case 17: { return GleamTypes.COLON; } // fall through - case 104: break; + case 123: break; case 18: { return GleamTypes.LESS; } // fall through - case 105: break; + case 124: break; case 19: { return GleamTypes.EQUAL; } // fall through - case 106: break; + case 125: break; case 20: { return GleamTypes.GREATER; } // fall through - case 107: break; + case 126: break; case 21: { return GleamTypes.UP_IDENTIFIER; } // fall through - case 108: break; + case 127: break; case 22: { return GleamTypes.LBRACK; } // fall through - case 109: break; + case 128: break; case 23: { return GleamTypes.RBRACK; } // fall through - case 110: break; + case 129: break; case 24: { return GleamTypes.DISCARD_NAME; } // fall through - case 111: break; + case 130: break; case 25: { return GleamTypes.IDENTIFIER; } // fall through - case 112: break; + case 131: break; case 26: { return GleamTypes.LBRACE; } // fall through - case 113: break; + case 132: break; case 27: { return GleamTypes.VBAR; } // fall through - case 114: break; + case 133: break; case 28: { return GleamTypes.RBRACE; } // fall through - case 115: break; + case 134: break; case 29: { popState(); return GleamTypes.CLOSE_QUOTE; } // fall through - case 116: break; + case 135: break; case 30: { pushState(ESCAPE_SEQUENCE); return GleamTypes.ESCAPE; } // fall through - case 117: break; + case 136: break; case 31: { popState(); return GleamTypes.ESCAPE_CHAR; } // fall through - case 118: break; + case 137: break; case 32: { popState(); return GleamTypes.EOL; } // fall through - case 119: break; + case 138: break; case 33: { yybegin(UNICODE_ESCAPE_SEQUENCE); return GleamTypes.UNICODE_ESCAPE_CHAR; } // fall through - case 120: break; + case 139: break; case 34: { popState(); return TokenType.BAD_CHARACTER; } // fall through - case 121: break; + case 140: break; case 35: { yybegin(UNICODE_CODEPOINT_SEQUENCE); return GleamTypes.LBRACE; } // fall through - case 122: break; + case 141: break; case 36: { return GleamTypes.UNICODE_CODEPOINT; } // fall through - case 123: break; + case 142: break; case 37: { popState(); return GleamTypes.RBRACE; } // fall through - case 124: break; + case 143: break; case 38: - { return GleamTypes.NOT_EQUAL; + { handleInLastState(); } // fall through - case 125: break; + case 144: break; case 39: - { return GleamTypes.AMPER_AMPER; + { yybegin(DECIMAL_FRACTION); return GleamTypes.DECIMAL_MARK; } // fall through - case 126: break; + case 145: break; case 40: - { return GleamTypes.STAR_DOT; + { return GleamTypes.VALID_DECIMAL_DIGIT; } // fall through - case 127: break; + case 146: break; case 41: - { return GleamTypes.PLUS_DOT; + { return GleamTypes.INVALID_DECIMAL_DIGIT; } // fall through - case 128: break; + case 147: break; case 42: - { return GleamTypes.MINUS_DOT; + { return GleamTypes.NUMBER_SEPARATOR; } // fall through - case 129: break; + case 148: break; case 43: - { return GleamTypes.R_ARROW; + { yybegin(UNKNOWN_BASE_NUMBER); return GleamTypes.UNKNOWN_NUMBER_BASE; } // fall through - case 130: break; + case 149: break; case 44: - { return GleamTypes.DOT_DOT; + { yybegin(BINARY_NUMBER); return GleamTypes.BINARY_NUMBER_BASE; } // fall through - case 131: break; + case 150: break; case 45: - { return GleamTypes.SLASH_DOT; + { yybegin(OCTAL_NUMBER); return GleamTypes.OCTAL_NUMBER_BASE; } // fall through - case 132: break; + case 151: break; case 46: - { return GleamTypes.LINE_COMMENT; + { yybegin(HEX_NUMBER); return GleamTypes.HEX_NUMBER_BASE; } // fall through - case 133: break; + case 152: break; case 47: - { return GleamTypes.L_ARROW; + { return GleamTypes.VALID_BINARY_DIGIT; } // fall through - case 134: break; + case 153: break; case 48: - { return GleamTypes.LESS_DOT; + { return GleamTypes.INVALID_BINARY_DIGIT; } // fall through - case 135: break; + case 154: break; case 49: - { return GleamTypes.LT_LT; + { return GleamTypes.VALID_HEX_DIGIT; } // fall through - case 136: break; + case 155: break; case 50: - { return GleamTypes.LESS_EQUAL; + { return GleamTypes.INVALID_HEX_DIGIT; } // fall through - case 137: break; + case 156: break; case 51: - { return GleamTypes.LT_GT; + { return GleamTypes.VALID_OCTAL_DIGIT; } // fall through - case 138: break; + case 157: break; case 52: - { return GleamTypes.EQUAL_EQUAL; + { return GleamTypes.INVALID_OCTAL_DIGIT; } // fall through - case 139: break; + case 158: break; case 53: - { return GleamTypes.GREATER_DOT; + { return GleamTypes.INVALID_UNKNOWN_BASE_DIGIT; } // fall through - case 140: break; + case 159: break; case 54: - { return GleamTypes.GREATER_EQUAL; + { yybegin(DECIMAL_EXPONENT); return GleamTypes.EXPONENT_MARK; } // fall through - case 141: break; + case 160: break; case 55: - { return GleamTypes.GT_GT; + { yybegin(DECIMAL_EXPONENT); } // fall through - case 142: break; + case 161: break; case 56: - { return GleamTypes.AS; + { yybegin(DECIMAL_EXPONENT); return GleamTypes.EXPONENT_SIGN; } // fall through - case 143: break; + case 162: break; case 57: - { return GleamTypes.FN; + { return GleamTypes.NOT_EQUAL; } // fall through - case 144: break; + case 163: break; case 58: - { return GleamTypes.IF; + { return GleamTypes.AMPER_AMPER; } // fall through - case 145: break; + case 164: break; case 59: - { return GleamTypes.PIPE; + { return GleamTypes.STAR_DOT; } // fall through - case 146: break; + case 165: break; case 60: - { return GleamTypes.VBAR_VBAR; + { return GleamTypes.PLUS_DOT; } // fall through - case 147: break; + case 166: break; case 61: - { return GleamTypes.FUNCTION_COMMENT; + { return GleamTypes.MINUS_DOT; } // fall through - case 148: break; + case 167: break; case 62: - { return GleamTypes.FLOAT_LITERAL; + { return GleamTypes.R_ARROW; } // fall through - case 149: break; + case 168: break; case 63: - { return GleamTypes.LESS_EQUAL_DOT; + { return GleamTypes.DOT_DOT; } // fall through - case 150: break; + case 169: break; case 64: - { return GleamTypes.GREATER_EQUAL_DOT; + { return GleamTypes.SLASH_DOT; } // fall through - case 151: break; + case 170: break; case 65: - { return GleamTypes.LET; + { return GleamTypes.LINE_COMMENT; } // fall through - case 152: break; + case 171: break; case 66: - { return GleamTypes.PUB; + // lookahead expression with fixed base length + zzMarkedPos = Character.offsetByCodePoints + (zzBufferL, zzStartRead, 1); + { pushState(BASE_NUMBER_BASE); return GleamTypes.BASE_NUMBER_PREFIX; } // fall through - case 153: break; + case 172: break; case 67: - { return GleamTypes.TRY; + { return GleamTypes.L_ARROW; } // fall through - case 154: break; + case 173: break; case 68: - { return GleamTypes.USE; + { return GleamTypes.LESS_DOT; } // fall through - case 155: break; + case 174: break; case 69: - { return GleamTypes.MODULE_COMMENT; + { return GleamTypes.LT_LT; } // fall through - case 156: break; + case 175: break; case 70: - { return GleamTypes.BOOLEAN_LITERAL; + { return GleamTypes.LESS_EQUAL; } // fall through - case 157: break; + case 176: break; case 71: - { return GleamTypes.AUTO; + { return GleamTypes.LT_GT; } // fall through - case 158: break; + case 177: break; case 72: - { return GleamTypes.CASE; + { return GleamTypes.EQUAL_EQUAL; } // fall through - case 159: break; + case 178: break; case 73: - { return GleamTypes.ECHO; + { return GleamTypes.GREATER_DOT; } // fall through - case 160: break; + case 179: break; case 74: - { return GleamTypes.ELSE; + { return GleamTypes.GREATER_EQUAL; } // fall through - case 161: break; + case 180: break; case 75: - { return GleamTypes.TEST; + { return GleamTypes.GT_GT; } // fall through - case 162: break; + case 181: break; case 76: - { return GleamTypes.TODO; + { return GleamTypes.AS; } // fall through - case 163: break; + case 182: break; case 77: - { return GleamTypes.TYPE; + { return GleamTypes.FN; } // fall through - case 164: break; + case 183: break; case 78: - { return GleamTypes.CONST; + { return GleamTypes.IF; } // fall through - case 165: break; + case 184: break; case 79: - { return GleamTypes.MACRO; + { return GleamTypes.PIPE; } // fall through - case 166: break; + case 185: break; case 80: - { return GleamTypes.PANIC; + { return GleamTypes.VBAR_VBAR; } // fall through - case 167: break; + case 186: break; case 81: - { return GleamTypes.ASSERT; + { return GleamTypes.FUNCTION_COMMENT; } // fall through - case 168: break; + case 187: break; case 82: - { return GleamTypes.DERIVE; + { return GleamTypes.LESS_EQUAL_DOT; } // fall through - case 169: break; + case 188: break; case 83: - { return GleamTypes.IMPORT; + { return GleamTypes.GREATER_EQUAL_DOT; } // fall through - case 170: break; + case 189: break; case 84: - { return GleamTypes.OPAQUE; + { return GleamTypes.LET; } // fall through - case 171: break; + case 190: break; case 85: - { return GleamTypes.DELEGATE; + { return GleamTypes.PUB; } // fall through - case 172: break; + case 191: break; case 86: - { return GleamTypes.EXTERNAL; + { return GleamTypes.TRY; } // fall through - case 173: break; + case 192: break; case 87: + { return GleamTypes.USE; + } + // fall through + case 193: break; + case 88: + { return GleamTypes.MODULE_COMMENT; + } + // fall through + case 194: break; + case 89: + { return GleamTypes.BOOLEAN_LITERAL; + } + // fall through + case 195: break; + case 90: + { return GleamTypes.AUTO; + } + // fall through + case 196: break; + case 91: + { return GleamTypes.CASE; + } + // fall through + case 197: break; + case 92: + { return GleamTypes.ECHO; + } + // fall through + case 198: break; + case 93: + { return GleamTypes.ELSE; + } + // fall through + case 199: break; + case 94: + { return GleamTypes.TEST; + } + // fall through + case 200: break; + case 95: + { return GleamTypes.TODO; + } + // fall through + case 201: break; + case 96: + { return GleamTypes.TYPE; + } + // fall through + case 202: break; + case 97: + { return GleamTypes.CONST; + } + // fall through + case 203: break; + case 98: + { return GleamTypes.MACRO; + } + // fall through + case 204: break; + case 99: + { return GleamTypes.PANIC; + } + // fall through + case 205: break; + case 100: + { return GleamTypes.ASSERT; + } + // fall through + case 206: break; + case 101: + { return GleamTypes.DERIVE; + } + // fall through + case 207: break; + case 102: + { return GleamTypes.IMPORT; + } + // fall through + case 208: break; + case 103: + { return GleamTypes.OPAQUE; + } + // fall through + case 209: break; + case 104: + { return GleamTypes.DELEGATE; + } + // fall through + case 210: break; + case 105: + { return GleamTypes.EXTERNAL; + } + // fall through + case 211: break; + case 106: { return GleamTypes.IMPLEMENT; } // fall through - case 174: break; + case 212: break; default: zzScanError(ZZ_NO_MATCH); } diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamBinaryIntegerLiteral.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamBinaryIntegerLiteral.java new file mode 100644 index 0000000..721d499 --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamBinaryIntegerLiteral.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface GleamBinaryIntegerLiteral extends PsiElement { + + @NotNull + PsiElement getBinaryNumberBase(); + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamBitStringSegmentOption.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamBitStringSegmentOption.java index 754815b..5812d33 100644 --- a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamBitStringSegmentOption.java +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamBitStringSegmentOption.java @@ -11,6 +11,6 @@ public interface GleamBitStringSegmentOption extends PsiElement { GleamBitStringNamedSegmentOption getBitStringNamedSegmentOption(); @Nullable - PsiElement getIntegerLiteral(); + GleamWholeNumber getWholeNumber(); } diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamBitStringSegmentOptionSize.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamBitStringSegmentOptionSize.java index 69eb6d8..b0ac8cd 100644 --- a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamBitStringSegmentOptionSize.java +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamBitStringSegmentOptionSize.java @@ -8,9 +8,9 @@ public interface GleamBitStringSegmentOptionSize extends PsiElement { @NotNull - PsiElement getIdentifier(); + GleamWholeNumber getWholeNumber(); @NotNull - PsiElement getIntegerLiteral(); + PsiElement getIdentifier(); } diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamCaseClauseTupleAccess.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamCaseClauseTupleAccess.java index 1bd3ea5..72f4ced 100644 --- a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamCaseClauseTupleAccess.java +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamCaseClauseTupleAccess.java @@ -8,9 +8,9 @@ public interface GleamCaseClauseTupleAccess extends PsiElement { @NotNull - PsiElement getIdentifier(); + GleamWholeNumber getWholeNumber(); @NotNull - PsiElement getIntegerLiteral(); + PsiElement getIdentifier(); } diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamDecimalIntegerLiteral.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamDecimalIntegerLiteral.java new file mode 100644 index 0000000..e46c660 --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamDecimalIntegerLiteral.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface GleamDecimalIntegerLiteral extends PsiElement { + + @NotNull + GleamWholeNumber getWholeNumber(); + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamFloatLiteral.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamFloatLiteral.java new file mode 100644 index 0000000..0008ea9 --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamFloatLiteral.java @@ -0,0 +1,16 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface GleamFloatLiteral extends PsiElement { + + @NotNull + List getWholeNumberList(); + + @Nullable + PsiElement getExponentSign(); + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamHexIntegerLiteral.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamHexIntegerLiteral.java new file mode 100644 index 0000000..b06e500 --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamHexIntegerLiteral.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface GleamHexIntegerLiteral extends PsiElement { + + @NotNull + PsiElement getHexNumberBase(); + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamIntegerLiteral.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamIntegerLiteral.java new file mode 100644 index 0000000..37b2e4c --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamIntegerLiteral.java @@ -0,0 +1,22 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface GleamIntegerLiteral extends PsiElement { + + @Nullable + GleamBinaryIntegerLiteral getBinaryIntegerLiteral(); + + @Nullable + GleamDecimalIntegerLiteral getDecimalIntegerLiteral(); + + @Nullable + GleamHexIntegerLiteral getHexIntegerLiteral(); + + @Nullable + GleamOctalIntegerLiteral getOctalIntegerLiteral(); + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamLiteralExpr.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamLiteralExpr.java index 204c992..3bef69d 100644 --- a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamLiteralExpr.java +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamLiteralExpr.java @@ -8,15 +8,15 @@ public interface GleamLiteralExpr extends GleamExpression { @Nullable - GleamStringLiteral getStringLiteral(); + GleamFloatLiteral getFloatLiteral(); @Nullable - PsiElement getBooleanLiteral(); + GleamIntegerLiteral getIntegerLiteral(); @Nullable - PsiElement getFloatLiteral(); + GleamStringLiteral getStringLiteral(); @Nullable - PsiElement getIntegerLiteral(); + PsiElement getBooleanLiteral(); } diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamOctalIntegerLiteral.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamOctalIntegerLiteral.java new file mode 100644 index 0000000..cab637a --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamOctalIntegerLiteral.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface GleamOctalIntegerLiteral extends PsiElement { + + @NotNull + PsiElement getOctalNumberBase(); + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamTypes.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamTypes.java index df84f83..9b36be7 100644 --- a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamTypes.java +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamTypes.java @@ -18,6 +18,7 @@ public interface GleamTypes { IElementType ASSERT_EXPR = new GleamType("ASSERT_EXPR"); IElementType ASSIGNMENT = new GleamType("ASSIGNMENT"); IElementType BINARY_EXPR = new GleamType("BINARY_EXPR"); + IElementType BINARY_INTEGER_LITERAL = new GleamType("BINARY_INTEGER_LITERAL"); IElementType BINARY_OPERATOR = new GleamType("BINARY_OPERATOR"); IElementType BIT_STRING_NAMED_SEGMENT_OPTION = new GleamType("BIT_STRING_NAMED_SEGMENT_OPTION"); IElementType BIT_STRING_SEGMENT_OPTION = new GleamType("BIT_STRING_SEGMENT_OPTION"); @@ -60,6 +61,7 @@ public interface GleamTypes { IElementType DATA_CONSTRUCTORS = new GleamType("DATA_CONSTRUCTORS"); IElementType DATA_CONSTRUCTOR_ARGUMENT = new GleamType("DATA_CONSTRUCTOR_ARGUMENT"); IElementType DATA_CONSTRUCTOR_ARGUMENTS = new GleamType("DATA_CONSTRUCTOR_ARGUMENTS"); + IElementType DECIMAL_INTEGER_LITERAL = new GleamType("DECIMAL_INTEGER_LITERAL"); IElementType DISCARD = new GleamType("DISCARD"); IElementType DISCARD_PARAM = new GleamType("DISCARD_PARAM"); IElementType EXPRESSION = new GleamType("EXPRESSION"); @@ -70,6 +72,7 @@ public interface GleamTypes { IElementType EXTERNAL_FUNCTION_BODY = new GleamType("EXTERNAL_FUNCTION_BODY"); IElementType EXTERNAL_FUNCTION_PARAMETER = new GleamType("EXTERNAL_FUNCTION_PARAMETER"); IElementType EXTERNAL_FUNCTION_PARAMETERS = new GleamType("EXTERNAL_FUNCTION_PARAMETERS"); + IElementType FLOAT_LITERAL = new GleamType("FLOAT_LITERAL"); IElementType FUNCTION = new GleamType("FUNCTION"); IElementType FUNCTION_BODY = new GleamType("FUNCTION_BODY"); IElementType FUNCTION_NAME_DEFINITION = new GleamType("FUNCTION_NAME_DEFINITION"); @@ -78,8 +81,10 @@ public interface GleamTypes { IElementType FUNCTION_PARAMETER_ARGS = new GleamType("FUNCTION_PARAMETER_ARGS"); IElementType FUNCTION_PARAMETER_TYPES = new GleamType("FUNCTION_PARAMETER_TYPES"); IElementType FUNCTION_TYPE = new GleamType("FUNCTION_TYPE"); + IElementType HEX_INTEGER_LITERAL = new GleamType("HEX_INTEGER_LITERAL"); IElementType HOLE = new GleamType("HOLE"); IElementType IMPORTS = new GleamType("IMPORTS"); + IElementType INTEGER_LITERAL = new GleamType("INTEGER_LITERAL"); IElementType LABEL = new GleamType("LABEL"); IElementType LABELED_DISCARD_PARAM = new GleamType("LABELED_DISCARD_PARAM"); IElementType LABELED_NAME_PARAM = new GleamType("LABELED_NAME_PARAM"); @@ -91,6 +96,7 @@ public interface GleamTypes { IElementType MODULE = new GleamType("MODULE"); IElementType NAME_PARAM = new GleamType("NAME_PARAM"); IElementType NEGATION_EXPR = new GleamType("NEGATION_EXPR"); + IElementType OCTAL_INTEGER_LITERAL = new GleamType("OCTAL_INTEGER_LITERAL"); IElementType OPACITY_MODIFIER = new GleamType("OPACITY_MODIFIER"); IElementType PARENTHESIZED_EXPR = new GleamType("PARENTHESIZED_EXPR"); IElementType PATTERN = new GleamType("PATTERN"); @@ -134,18 +140,22 @@ public interface GleamTypes { IElementType USE_ARGS = new GleamType("USE_ARGS"); IElementType USE_EXPR = new GleamType("USE_EXPR"); IElementType VISIBILITY_MODIFIER = new GleamType("VISIBILITY_MODIFIER"); + IElementType WHOLE_NUMBER = new GleamType("WHOLE_NUMBER"); IElementType AMPER_AMPER = new IElementType("&&", null); IElementType AS = new IElementType("as", null); IElementType ASSERT = new IElementType("assert", null); IElementType AUTO = new IElementType("auto", null); IElementType BANG = new IElementType("!", null); + IElementType BASE_NUMBER_PREFIX = new IElementType("0", null); + IElementType BINARY_NUMBER_BASE = new IElementType("BINARY_NUMBER_BASE", null); IElementType BOOLEAN_LITERAL = new IElementType("BOOLEAN_LITERAL", null); IElementType CASE = new IElementType("case", null); IElementType CLOSE_QUOTE = new IElementType("\"", null); IElementType COLON = new IElementType(":", null); IElementType COMMA = new IElementType(",", null); IElementType CONST = new IElementType("const", null); + IElementType DECIMAL_MARK = new IElementType(". (decimal separator)", null); IElementType DELEGATE = new IElementType("delegate", null); IElementType DERIVE = new IElementType("derive", null); IElementType DISCARD_NAME = new IElementType("DISCARD_NAME", null); @@ -158,8 +168,9 @@ public interface GleamTypes { IElementType EQUAL_EQUAL = new IElementType("==", null); IElementType ESCAPE = new IElementType("ESCAPE", null); IElementType ESCAPE_CHAR = new IElementType("ESCAPE_CHAR", null); + IElementType EXPONENT_MARK = new IElementType("e (exponent)", null); + IElementType EXPONENT_SIGN = new IElementType("EXPONENT_SIGN", null); IElementType EXTERNAL = new IElementType("external", null); - IElementType FLOAT_LITERAL = new IElementType("FLOAT_LITERAL", null); IElementType FN = new IElementType("fn", null); IElementType FUNCTION_COMMENT = new IElementType("FUNCTION_COMMENT", null); IElementType GREATER = new IElementType(">", null); @@ -168,12 +179,17 @@ public interface GleamTypes { IElementType GREATER_EQUAL_DOT = new IElementType(">=.", null); IElementType GT_GT = new IElementType(">>", null); IElementType HASH = new IElementType("#", null); + IElementType HEX_NUMBER_BASE = new IElementType("HEX_NUMBER_BASE", null); IElementType IDENTIFIER = new IElementType("IDENTIFIER", null); IElementType IF = new IElementType("if", null); IElementType IMPLEMENT = new IElementType("implement", null); IElementType IMPORT = new IElementType("import", null); - IElementType INTEGER_LITERAL = new IElementType("INTEGER_LITERAL", null); + IElementType INVALID_BINARY_DIGIT = new IElementType("INVALID_BINARY_DIGIT", null); + IElementType INVALID_DECIMAL_DIGIT = new IElementType("INVALID_DECIMAL_DIGIT", null); + IElementType INVALID_HEX_DIGIT = new IElementType("INVALID_HEX_DIGIT", null); + IElementType INVALID_OCTAL_DIGIT = new IElementType("INVALID_OCTAL_DIGIT", null); IElementType INVALID_UNICODE_ESCAPE_SEQUENCE = new IElementType("INVALID_UNICODE_ESCAPE_SEQUENCE", null); + IElementType INVALID_UNKNOWN_BASE_DIGIT = new IElementType("INVALID_UNKNOWN_BASE_DIGIT", null); IElementType LBRACE = new IElementType("{", null); IElementType LBRACK = new IElementType("[", null); IElementType LESS = new IElementType("<", null); @@ -191,6 +207,8 @@ public interface GleamTypes { IElementType MINUS_DOT = new IElementType("-.", null); IElementType MODULE_COMMENT = new IElementType("MODULE_COMMENT", null); IElementType NOT_EQUAL = new IElementType("!=", null); + IElementType NUMBER_SEPARATOR = new IElementType("_", null); + IElementType OCTAL_NUMBER_BASE = new IElementType("OCTAL_NUMBER_BASE", null); IElementType OPAQUE = new IElementType("opaque", null); IElementType OPEN_QUOTE = new IElementType("OPEN_QUOTE", null); IElementType PANIC = new IElementType("panic", null); @@ -214,8 +232,13 @@ public interface GleamTypes { IElementType TYPE = new IElementType("type", null); IElementType UNICODE_CODEPOINT = new IElementType("UNICODE_CODEPOINT", null); IElementType UNICODE_ESCAPE_CHAR = new IElementType("u", null); + IElementType UNKNOWN_NUMBER_BASE = new IElementType("UNKNOWN_NUMBER_BASE", null); IElementType UP_IDENTIFIER = new IElementType("UP_IDENTIFIER", null); IElementType USE = new IElementType("use", null); + IElementType VALID_BINARY_DIGIT = new IElementType("VALID_BINARY_DIGIT", null); + IElementType VALID_DECIMAL_DIGIT = new IElementType("VALID_DECIMAL_DIGIT", null); + IElementType VALID_HEX_DIGIT = new IElementType("VALID_HEX_DIGIT", null); + IElementType VALID_OCTAL_DIGIT = new IElementType("VALID_OCTAL_DIGIT", null); IElementType VBAR = new IElementType("|", null); IElementType VBAR_VBAR = new IElementType("||", null); @@ -252,6 +275,9 @@ else if (type == ASSIGNMENT) { else if (type == BINARY_EXPR) { return new GleamBinaryExprImpl(node); } + else if (type == BINARY_INTEGER_LITERAL) { + return new GleamBinaryIntegerLiteralImpl(node); + } else if (type == BINARY_OPERATOR) { return new GleamBinaryOperatorImpl(node); } @@ -378,6 +404,9 @@ else if (type == DATA_CONSTRUCTOR_ARGUMENT) { else if (type == DATA_CONSTRUCTOR_ARGUMENTS) { return new GleamDataConstructorArgumentsImpl(node); } + else if (type == DECIMAL_INTEGER_LITERAL) { + return new GleamDecimalIntegerLiteralImpl(node); + } else if (type == DISCARD) { return new GleamDiscardImpl(node); } @@ -405,6 +434,9 @@ else if (type == EXTERNAL_FUNCTION_PARAMETER) { else if (type == EXTERNAL_FUNCTION_PARAMETERS) { return new GleamExternalFunctionParametersImpl(node); } + else if (type == FLOAT_LITERAL) { + return new GleamFloatLiteralImpl(node); + } else if (type == FUNCTION) { return new GleamFunctionImpl(node); } @@ -429,12 +461,18 @@ else if (type == FUNCTION_PARAMETER_TYPES) { else if (type == FUNCTION_TYPE) { return new GleamFunctionTypeImpl(node); } + else if (type == HEX_INTEGER_LITERAL) { + return new GleamHexIntegerLiteralImpl(node); + } else if (type == HOLE) { return new GleamHoleImpl(node); } else if (type == IMPORTS) { return new GleamImportsImpl(node); } + else if (type == INTEGER_LITERAL) { + return new GleamIntegerLiteralImpl(node); + } else if (type == LABEL) { return new GleamLabelImpl(node); } @@ -468,6 +506,9 @@ else if (type == NAME_PARAM) { else if (type == NEGATION_EXPR) { return new GleamNegationExprImpl(node); } + else if (type == OCTAL_INTEGER_LITERAL) { + return new GleamOctalIntegerLiteralImpl(node); + } else if (type == OPACITY_MODIFIER) { return new GleamOpacityModifierImpl(node); } @@ -597,6 +638,9 @@ else if (type == USE_EXPR) { else if (type == VISIBILITY_MODIFIER) { return new GleamVisibilityModifierImpl(node); } + else if (type == WHOLE_NUMBER) { + return new GleamWholeNumberImpl(node); + } throw new AssertionError("Unknown element type: " + type); } } diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamVisitor.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamVisitor.java index 851447b..26d1936 100644 --- a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamVisitor.java +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamVisitor.java @@ -47,6 +47,10 @@ public void visitBinaryExpr(@NotNull GleamBinaryExpr o) { visitExpression(o); } + public void visitBinaryIntegerLiteral(@NotNull GleamBinaryIntegerLiteral o) { + visitPsiElement(o); + } + public void visitBinaryOperator(@NotNull GleamBinaryOperator o) { visitPsiElement(o); } @@ -215,6 +219,10 @@ public void visitDataConstructors(@NotNull GleamDataConstructors o) { visitPsiElement(o); } + public void visitDecimalIntegerLiteral(@NotNull GleamDecimalIntegerLiteral o) { + visitPsiElement(o); + } + public void visitDiscard(@NotNull GleamDiscard o) { visitPsiElement(o); } @@ -255,6 +263,10 @@ public void visitExternalFunctionParameters(@NotNull GleamExternalFunctionParame visitPsiElement(o); } + public void visitFloatLiteral(@NotNull GleamFloatLiteral o) { + visitPsiElement(o); + } + public void visitFunction(@NotNull GleamFunction o) { visitPsiElement(o); } @@ -287,6 +299,10 @@ public void visitFunctionType(@NotNull GleamFunctionType o) { visitPsiElement(o); } + public void visitHexIntegerLiteral(@NotNull GleamHexIntegerLiteral o) { + visitPsiElement(o); + } + public void visitHole(@NotNull GleamHole o) { visitPsiElement(o); } @@ -295,6 +311,10 @@ public void visitImports(@NotNull GleamImports o) { visitPsiElement(o); } + public void visitIntegerLiteral(@NotNull GleamIntegerLiteral o) { + visitPsiElement(o); + } + public void visitLabel(@NotNull GleamLabel o) { visitPsiElement(o); } @@ -339,6 +359,10 @@ public void visitNegationExpr(@NotNull GleamNegationExpr o) { visitExpression(o); } + public void visitOctalIntegerLiteral(@NotNull GleamOctalIntegerLiteral o) { + visitPsiElement(o); + } + public void visitOpacityModifier(@NotNull GleamOpacityModifier o) { visitPsiElement(o); } @@ -511,6 +535,10 @@ public void visitVisibilityModifier(@NotNull GleamVisibilityModifier o) { visitPsiElement(o); } + public void visitWholeNumber(@NotNull GleamWholeNumber o) { + visitPsiElement(o); + } + public void visitPsiElement(@NotNull PsiElement o) { visitElement(o); } diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/GleamWholeNumber.java b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamWholeNumber.java new file mode 100644 index 0000000..4f80a4b --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/GleamWholeNumber.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface GleamWholeNumber extends PsiElement { + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamBinaryIntegerLiteralImpl.java b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamBinaryIntegerLiteralImpl.java new file mode 100644 index 0000000..b00781f --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamBinaryIntegerLiteralImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static com.github.themartdev.intellijgleam.lang.psi.GleamTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.github.themartdev.intellijgleam.lang.psi.*; + +public class GleamBinaryIntegerLiteralImpl extends ASTWrapperPsiElement implements GleamBinaryIntegerLiteral { + + public GleamBinaryIntegerLiteralImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull GleamVisitor visitor) { + visitor.visitBinaryIntegerLiteral(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof GleamVisitor) accept((GleamVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public PsiElement getBinaryNumberBase() { + return findNotNullChildByType(BINARY_NUMBER_BASE); + } + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamBitStringSegmentOptionImpl.java b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamBitStringSegmentOptionImpl.java index ea94d52..1476092 100644 --- a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamBitStringSegmentOptionImpl.java +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamBitStringSegmentOptionImpl.java @@ -35,8 +35,8 @@ public GleamBitStringNamedSegmentOption getBitStringNamedSegmentOption() { @Override @Nullable - public PsiElement getIntegerLiteral() { - return findChildByType(INTEGER_LITERAL); + public GleamWholeNumber getWholeNumber() { + return findChildByClass(GleamWholeNumber.class); } } diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamBitStringSegmentOptionSizeImpl.java b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamBitStringSegmentOptionSizeImpl.java index 2dc438c..ffd022f 100644 --- a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamBitStringSegmentOptionSizeImpl.java +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamBitStringSegmentOptionSizeImpl.java @@ -29,14 +29,14 @@ public void accept(@NotNull PsiElementVisitor visitor) { @Override @NotNull - public PsiElement getIdentifier() { - return findNotNullChildByType(IDENTIFIER); + public GleamWholeNumber getWholeNumber() { + return findNotNullChildByClass(GleamWholeNumber.class); } @Override @NotNull - public PsiElement getIntegerLiteral() { - return findNotNullChildByType(INTEGER_LITERAL); + public PsiElement getIdentifier() { + return findNotNullChildByType(IDENTIFIER); } } diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamCaseClauseTupleAccessImpl.java b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamCaseClauseTupleAccessImpl.java index 3bf1b69..1bed7bb 100644 --- a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamCaseClauseTupleAccessImpl.java +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamCaseClauseTupleAccessImpl.java @@ -29,14 +29,14 @@ public void accept(@NotNull PsiElementVisitor visitor) { @Override @NotNull - public PsiElement getIdentifier() { - return findNotNullChildByType(IDENTIFIER); + public GleamWholeNumber getWholeNumber() { + return findNotNullChildByClass(GleamWholeNumber.class); } @Override @NotNull - public PsiElement getIntegerLiteral() { - return findNotNullChildByType(INTEGER_LITERAL); + public PsiElement getIdentifier() { + return findNotNullChildByType(IDENTIFIER); } } diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamDecimalIntegerLiteralImpl.java b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamDecimalIntegerLiteralImpl.java new file mode 100644 index 0000000..c465c9d --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamDecimalIntegerLiteralImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static com.github.themartdev.intellijgleam.lang.psi.GleamTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.github.themartdev.intellijgleam.lang.psi.*; + +public class GleamDecimalIntegerLiteralImpl extends ASTWrapperPsiElement implements GleamDecimalIntegerLiteral { + + public GleamDecimalIntegerLiteralImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull GleamVisitor visitor) { + visitor.visitDecimalIntegerLiteral(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof GleamVisitor) accept((GleamVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public GleamWholeNumber getWholeNumber() { + return findNotNullChildByClass(GleamWholeNumber.class); + } + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamFloatLiteralImpl.java b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamFloatLiteralImpl.java new file mode 100644 index 0000000..57ad04c --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamFloatLiteralImpl.java @@ -0,0 +1,42 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static com.github.themartdev.intellijgleam.lang.psi.GleamTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.github.themartdev.intellijgleam.lang.psi.*; + +public class GleamFloatLiteralImpl extends ASTWrapperPsiElement implements GleamFloatLiteral { + + public GleamFloatLiteralImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull GleamVisitor visitor) { + visitor.visitFloatLiteral(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof GleamVisitor) accept((GleamVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getWholeNumberList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, GleamWholeNumber.class); + } + + @Override + @Nullable + public PsiElement getExponentSign() { + return findChildByType(EXPONENT_SIGN); + } + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamHexIntegerLiteralImpl.java b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamHexIntegerLiteralImpl.java new file mode 100644 index 0000000..8ce4a8f --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamHexIntegerLiteralImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static com.github.themartdev.intellijgleam.lang.psi.GleamTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.github.themartdev.intellijgleam.lang.psi.*; + +public class GleamHexIntegerLiteralImpl extends ASTWrapperPsiElement implements GleamHexIntegerLiteral { + + public GleamHexIntegerLiteralImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull GleamVisitor visitor) { + visitor.visitHexIntegerLiteral(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof GleamVisitor) accept((GleamVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public PsiElement getHexNumberBase() { + return findNotNullChildByType(HEX_NUMBER_BASE); + } + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamIntegerLiteralImpl.java b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamIntegerLiteralImpl.java new file mode 100644 index 0000000..3ed01a5 --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamIntegerLiteralImpl.java @@ -0,0 +1,54 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static com.github.themartdev.intellijgleam.lang.psi.GleamTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.github.themartdev.intellijgleam.lang.psi.*; + +public class GleamIntegerLiteralImpl extends ASTWrapperPsiElement implements GleamIntegerLiteral { + + public GleamIntegerLiteralImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull GleamVisitor visitor) { + visitor.visitIntegerLiteral(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof GleamVisitor) accept((GleamVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public GleamBinaryIntegerLiteral getBinaryIntegerLiteral() { + return findChildByClass(GleamBinaryIntegerLiteral.class); + } + + @Override + @Nullable + public GleamDecimalIntegerLiteral getDecimalIntegerLiteral() { + return findChildByClass(GleamDecimalIntegerLiteral.class); + } + + @Override + @Nullable + public GleamHexIntegerLiteral getHexIntegerLiteral() { + return findChildByClass(GleamHexIntegerLiteral.class); + } + + @Override + @Nullable + public GleamOctalIntegerLiteral getOctalIntegerLiteral() { + return findChildByClass(GleamOctalIntegerLiteral.class); + } + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamLiteralExprImpl.java b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamLiteralExprImpl.java index ed491f6..ffb8d81 100644 --- a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamLiteralExprImpl.java +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamLiteralExprImpl.java @@ -29,26 +29,26 @@ public void accept(@NotNull PsiElementVisitor visitor) { @Override @Nullable - public GleamStringLiteral getStringLiteral() { - return findChildByClass(GleamStringLiteral.class); + public GleamFloatLiteral getFloatLiteral() { + return findChildByClass(GleamFloatLiteral.class); } @Override @Nullable - public PsiElement getBooleanLiteral() { - return findChildByType(BOOLEAN_LITERAL); + public GleamIntegerLiteral getIntegerLiteral() { + return findChildByClass(GleamIntegerLiteral.class); } @Override @Nullable - public PsiElement getFloatLiteral() { - return findChildByType(FLOAT_LITERAL); + public GleamStringLiteral getStringLiteral() { + return findChildByClass(GleamStringLiteral.class); } @Override @Nullable - public PsiElement getIntegerLiteral() { - return findChildByType(INTEGER_LITERAL); + public PsiElement getBooleanLiteral() { + return findChildByType(BOOLEAN_LITERAL); } } diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamOctalIntegerLiteralImpl.java b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamOctalIntegerLiteralImpl.java new file mode 100644 index 0000000..c3b529c --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamOctalIntegerLiteralImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static com.github.themartdev.intellijgleam.lang.psi.GleamTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.github.themartdev.intellijgleam.lang.psi.*; + +public class GleamOctalIntegerLiteralImpl extends ASTWrapperPsiElement implements GleamOctalIntegerLiteral { + + public GleamOctalIntegerLiteralImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull GleamVisitor visitor) { + visitor.visitOctalIntegerLiteral(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof GleamVisitor) accept((GleamVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public PsiElement getOctalNumberBase() { + return findNotNullChildByType(OCTAL_NUMBER_BASE); + } + +} diff --git a/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamWholeNumberImpl.java b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamWholeNumberImpl.java new file mode 100644 index 0000000..040e8cd --- /dev/null +++ b/gen/com/github/themartdev/intellijgleam/lang/psi/impl/GleamWholeNumberImpl.java @@ -0,0 +1,30 @@ +// This is a generated file. Not intended for manual editing. +package com.github.themartdev.intellijgleam.lang.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static com.github.themartdev.intellijgleam.lang.psi.GleamTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.github.themartdev.intellijgleam.lang.psi.*; + +public class GleamWholeNumberImpl extends ASTWrapperPsiElement implements GleamWholeNumber { + + public GleamWholeNumberImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull GleamVisitor visitor) { + visitor.visitWholeNumber(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof GleamVisitor) accept((GleamVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/grammars/Gleam.bnf b/grammars/Gleam.bnf index cf7590a..df7f27a 100644 --- a/grammars/Gleam.bnf +++ b/grammars/Gleam.bnf @@ -88,8 +88,6 @@ LT_GT = '<>' // Literals - INTEGER_LITERAL = "regexp:-?(0[bB][0-1_]+|0[xX][0-9a-fA-F_]+|0[oO][0-7_]+|[0-9][0-9_]*)" - FLOAT_LITERAL = "regexp:-?([0-9][0-9_]*\.[0-9_]+[0-9]*([Ee][+\-]?[0-9]+)?|[0-9][0-9_]*[Ee][+\-]?[0-9]+)" BOOLEAN_LITERAL = "regexp:True|False" // Identifiers @@ -111,6 +109,31 @@ UNICODE_ESCAPE_CHAR = "u" UNICODE_CODEPOINT = "regexp:[0-9a-fA-F]{1,6}" INVALID_UNICODE_ESCAPE_SEQUENCE="regexp:[^0-9a-fA-F]" + + //// Number stuff + VALID_DECIMAL_DIGIT = "regexp:[0-9]+" + INVALID_DECIMAL_DIGIT = "regexp:[a-zA-Z]+" + NUMBER_SEPARATOR = "_" + EXPONENT_MARK = "e (exponent)" + DECIMAL_MARK = ". (decimal separator)" + EXPONENT_SIGN = "regexp:[+-]" + + BASE_NUMBER_PREFIX = "0" + + BINARY_NUMBER_BASE = "regexp:[bB]" + VALID_BINARY_DIGIT = "regexp:[01]" + INVALID_BINARY_DIGIT = "regexp:[2-9a-zA-Z]" + + HEX_NUMBER_BASE = "regexp:[xX]" + VALID_HEX_DIGIT = "regexp:[0-9a-fA-F]" + INVALID_HEX_DIGIT = "regexp:[g-zG-Z]" + + OCTAL_NUMBER_BASE = "regexp:[oO]" + VALID_OCTAL_DIGIT = "regexp:[0-7]" + INVALID_OCTAL_DIGIT = "regexp:[8-9a-zA-Z]" + + UNKNOWN_NUMBER_BASE = "regexp:[a-zA-Z]" + INVALID_UNKNOWN_BASE_DIGIT = "regexp:[a-zA-Z1-9]" ] } @@ -119,10 +142,6 @@ // Rules sourceFile ::= (statement | expressionSeq | targetGroup)* -stringEscapeSegment ::= (ESCAPE ESCAPE_CHAR) | (ESCAPE UNICODE_ESCAPE_CHAR LBRACE UNICODE_CODEPOINT RBRACE) -stringLiteral ::= OPEN_QUOTE (REGULAR_STRING_PART | stringEscapeSegment)* CLOSE_QUOTE - - statement ::= imports | constant | externalFunction @@ -154,9 +173,9 @@ constantRecordArgument ::= [label COLON] constantValue constantRecordArguments ::= LPAREN [constantRecordArgument (COMMA constantRecordArgument)* [COMMA]] RPAREN constantRecord ::= (constructorIdentifier | remoteConstructorIdentifier) [constantRecordArguments] -bitStringSegmentOptionSize ::= IDENTIFIER LPAREN INTEGER_LITERAL RPAREN +bitStringSegmentOptionSize ::= IDENTIFIER LPAREN wholeNumber RPAREN bitStringNamedSegmentOption ::= IDENTIFIER | bitStringSegmentOptionSize -bitStringSegmentOption ::= bitStringNamedSegmentOption | INTEGER_LITERAL +bitStringSegmentOption ::= bitStringNamedSegmentOption | wholeNumber bitStringSegmentOptions ::= bitStringSegmentOption (MINUS bitStringSegmentOption)* [MINUS] constantBitStringSegment ::= constantValue [COLON bitStringSegmentOptions] constantBitString ::= LT_LT [constantBitStringSegment (COMMA constantBitStringSegment)* [COMMA]] GT_GT @@ -238,7 +257,7 @@ anonymousFunctionExpr ::= FN anonymousFunctionParameters [R_ARROW typeRule] func blockExpr ::= LBRACE expressionSeq RBRACE -caseClauseTupleAccess ::= IDENTIFIER DOT INTEGER_LITERAL +caseClauseTupleAccess ::= IDENTIFIER DOT wholeNumber caseClauseGuardUnit ::= IDENTIFIER | caseClauseTupleAccess | LBRACE caseClauseGuardExpression RBRACE | constantValue caseClauseGuardBinaryOperator ::= VBAR_VBAR | AMPER_AMPER | EQUAL_EQUAL | NOT_EQUAL | LESS | LESS_EQUAL | LESS_DOT | LESS_EQUAL_DOT | GREATER | GREATER_EQUAL | GREATER_DOT | GREATER_EQUAL_DOT @@ -273,9 +292,13 @@ accessExpr ::= expression DOT label referenceExpr ::= IDENTIFIER -literalExpr ::= stringLiteral | INTEGER_LITERAL | FLOAT_LITERAL | BOOLEAN_LITERAL +literalExpr ::= floatLiteral + | stringLiteral + | integerLiteral + | BOOLEAN_LITERAL expression ::= parenthesizedExpr + | literalExpr | callExpr | accessExpr | binaryExpr @@ -293,7 +316,6 @@ expression ::= parenthesizedExpr | assertExpr | negationExpr | recordUpdateExpr - | literalExpr parenthesizedExpr ::= LPAREN expression RPAREN @@ -313,6 +335,23 @@ typeAlias ::= [visibilityModifier] [opacityModifier] TYPE typeName EQUAL typeRul typeDefinition ::= [visibilityModifier] [opacityModifier] TYPE typeName LBRACE dataConstructors RBRACE +//// Numbers +binaryIntegerLiteral ::= BASE_NUMBER_PREFIX BINARY_NUMBER_BASE VALID_BINARY_DIGIT (NUMBER_SEPARATOR VALID_BINARY_DIGIT)* +octalIntegerLiteral ::= BASE_NUMBER_PREFIX OCTAL_NUMBER_BASE VALID_OCTAL_DIGIT (NUMBER_SEPARATOR VALID_OCTAL_DIGIT)* +hexIntegerLiteral ::= BASE_NUMBER_PREFIX HEX_NUMBER_BASE VALID_HEX_DIGIT (NUMBER_SEPARATOR VALID_HEX_DIGIT)* + +wholeNumber ::= VALID_DECIMAL_DIGIT (NUMBER_SEPARATOR VALID_DECIMAL_DIGIT)* +decimalIntegerLiteral ::= wholeNumber + +floatLiteral ::= wholeNumber DECIMAL_MARK wholeNumber? (EXPONENT_MARK EXPONENT_SIGN? wholeNumber)? +integerLiteral ::= binaryIntegerLiteral | octalIntegerLiteral | hexIntegerLiteral | decimalIntegerLiteral + + +//// Strings +stringEscapeSegment ::= (ESCAPE ESCAPE_CHAR) | (ESCAPE UNICODE_ESCAPE_CHAR LBRACE UNICODE_CODEPOINT RBRACE) +stringLiteral ::= OPEN_QUOTE (REGULAR_STRING_PART | stringEscapeSegment)* CLOSE_QUOTE + + // Aliases constructorIdentifier ::= UP_IDENTIFIER typeIdentifier ::= UP_IDENTIFIER diff --git a/grammars/Gleam.flex b/grammars/Gleam.flex index 1d70d95..db98673 100644 --- a/grammars/Gleam.flex +++ b/grammars/Gleam.flex @@ -55,8 +55,6 @@ EOL = \n|\r\n HEXADECIMAL_DIGIT = [A-Fa-f0-9] -INTEGER_LITERAL=-?(0[bB][0-1_]+|0[xX][0-9a-fA-F_]+|0[oO][0-7_]+|[0-9][0-9_]*) -FLOAT_LITERAL=-?([0-9][0-9_]*\.[0-9_]+[0-9]*([Ee][+\-]?[0-9]+)?|[0-9][0-9_]*[Ee][+\-]?[0-9]+) BOOLEAN_LITERAL=True|False DISCARD_NAME=_[_0-9a-z]* UP_IDENTIFIER=[A-Z][a-zA-Z0-9_]* @@ -67,11 +65,29 @@ LINE_COMMENT="//"[^\n]* WHITE_SPACE=[ \r\n\t\f]+ ANY=[^] +// NUmbers +SIGN_OPERATOR = "+" | "-" +NUMBER_SEPARATOR = "_" + + +//// String states %state IN_STRING %state ESCAPE_SEQUENCE %state UNICODE_ESCAPE_SEQUENCE %state UNICODE_CODEPOINT_SEQUENCE +//// Number states +%state DECIMAL_NUMBER +%state BASE_NUMBER_BASE +%state BINARY_NUMBER +%state HEX_NUMBER +%state OCTAL_NUMBER +%state UNKNOWN_BASE_NUMBER +%state DECIMAL_FRACTION +%state DECIMAL_EXPONENT +%state DECIMAL_EXPONENT_SIGN + + %% { // Reserved keywords @@ -142,11 +158,15 @@ ANY=[^] ">=." { return GleamTypes.GREATER_EQUAL_DOT; } "<>" { return GleamTypes.LT_GT; } - // Strings + //// Strings \" { pushState(IN_STRING); return GleamTypes.OPEN_QUOTE; } - {INTEGER_LITERAL} { return GleamTypes.INTEGER_LITERAL; } - {FLOAT_LITERAL} { return GleamTypes.FLOAT_LITERAL; } + //// Numbers + // Bases + "0" / [a-zA-Z] { pushState(BASE_NUMBER_BASE); return GleamTypes.BASE_NUMBER_PREFIX; } + // Normal + [0-9]+ { pushState(DECIMAL_NUMBER); return GleamTypes.VALID_DECIMAL_DIGIT; } + {BOOLEAN_LITERAL} { return GleamTypes.BOOLEAN_LITERAL; } {DISCARD_NAME} { return GleamTypes.DISCARD_NAME; } {UP_IDENTIFIER} { return GleamTypes.UP_IDENTIFIER; } @@ -157,6 +177,62 @@ ANY=[^] {WHITE_SPACE} { return TokenType.WHITE_SPACE; } } +// NUMBER STATES + { + [bB] { yybegin(BINARY_NUMBER); return GleamTypes.BINARY_NUMBER_BASE; } + [xX] { yybegin(HEX_NUMBER); return GleamTypes.HEX_NUMBER_BASE; } + [oO] { yybegin(OCTAL_NUMBER); return GleamTypes.OCTAL_NUMBER_BASE; } + [a-zA-Z] { yybegin(UNKNOWN_BASE_NUMBER); return GleamTypes.UNKNOWN_NUMBER_BASE; } +} + + { + {NUMBER_SEPARATOR} { return GleamTypes.NUMBER_SEPARATOR; } + [01]+ { return GleamTypes.VALID_BINARY_DIGIT; } + [a-zA-Z1-9]+ { return GleamTypes.INVALID_BINARY_DIGIT; } + [^] { handleInLastState(); } +} + + { + {NUMBER_SEPARATOR} { return GleamTypes.NUMBER_SEPARATOR; } + {HEXADECIMAL_DIGIT}+ { return GleamTypes.VALID_HEX_DIGIT; } + [g-zG-Z]+ { return GleamTypes.INVALID_HEX_DIGIT; } + [^] { handleInLastState(); } +} + + { + {NUMBER_SEPARATOR} { return GleamTypes.NUMBER_SEPARATOR; } + [0-7]+ { return GleamTypes.VALID_OCTAL_DIGIT; } + [A-Za-z8-9]+ { return GleamTypes.INVALID_OCTAL_DIGIT; } + [^] { handleInLastState(); } +} + + { + {NUMBER_SEPARATOR} { return GleamTypes.NUMBER_SEPARATOR; } + [a-zA-Z0-9]+ { return GleamTypes.INVALID_UNKNOWN_BASE_DIGIT; } + [^] { handleInLastState(); } +} + + { + {SIGN_OPERATOR} { yybegin(DECIMAL_EXPONENT); return GleamTypes.EXPONENT_SIGN; } + [^] { yybegin(DECIMAL_EXPONENT); } +} + + { + \. { yybegin(DECIMAL_FRACTION); return GleamTypes.DECIMAL_MARK; } +} + + { + "e" { yybegin(DECIMAL_EXPONENT); return GleamTypes.EXPONENT_MARK; } +} + + { + {NUMBER_SEPARATOR} { return GleamTypes.NUMBER_SEPARATOR; } + [0-9]+ { return GleamTypes.VALID_DECIMAL_DIGIT; } + [a-zA-Z]+ { return GleamTypes.INVALID_DECIMAL_DIGIT; } + [^] { handleInLastState(); } +} + +// STRING STATES { ([^\\\"])* { return GleamTypes.REGULAR_STRING_PART; } \\ { pushState(ESCAPE_SEQUENCE); return GleamTypes.ESCAPE; } diff --git a/grammars/temp.txt b/grammars/temp.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/main/kotlin/com/github/themartdev/intellijgleam/ide/highlighting/GleamColors.kt b/src/main/kotlin/com/github/themartdev/intellijgleam/ide/highlighting/GleamColors.kt index a3413c9..df503ad 100644 --- a/src/main/kotlin/com/github/themartdev/intellijgleam/ide/highlighting/GleamColors.kt +++ b/src/main/kotlin/com/github/themartdev/intellijgleam/ide/highlighting/GleamColors.kt @@ -1,6 +1,7 @@ package com.github.themartdev.intellijgleam.ide.highlighting import com.intellij.openapi.editor.DefaultLanguageHighlighterColors +import com.intellij.openapi.editor.HighlighterColors import com.intellij.openapi.editor.colors.TextAttributesKey.createTextAttributesKey object GleamColors { @@ -16,4 +17,10 @@ object GleamColors { val FUNCTION_DECLARATION = createTextAttributesKey("GLEAM_FUNCTION", DefaultLanguageHighlighterColors.FUNCTION_DECLARATION) val STRING = createTextAttributesKey("GLEAM_STRING", DefaultLanguageHighlighterColors.STRING) val STRING_ESCAPE = createTextAttributesKey("GLEAM_STRING_ESCAPE", DefaultLanguageHighlighterColors.VALID_STRING_ESCAPE) + + val VALID_DIGIT = createTextAttributesKey("GLEAM_VALID_DIGIT", DefaultLanguageHighlighterColors.NUMBER) + val INVALID_DIGIT = createTextAttributesKey("GLEAM_INVALID_DIGIT", HighlighterColors.BAD_CHARACTER) + val VALID_BASE = createTextAttributesKey("GLEAM_NUMBER_BASE", DefaultLanguageHighlighterColors.NUMBER) + val BASE_PREFIX = createTextAttributesKey("GLEAM_BASE_PREFIX", DefaultLanguageHighlighterColors.NUMBER) + val INVALID_BASE = createTextAttributesKey("GLEAM_INVALID_BASE", HighlighterColors.BAD_CHARACTER) } \ No newline at end of file diff --git a/src/main/kotlin/com/github/themartdev/intellijgleam/ide/highlighting/GleamSyntaxHighlighter.kt b/src/main/kotlin/com/github/themartdev/intellijgleam/ide/highlighting/GleamSyntaxHighlighter.kt index 7f9d458..6717ada 100644 --- a/src/main/kotlin/com/github/themartdev/intellijgleam/ide/highlighting/GleamSyntaxHighlighter.kt +++ b/src/main/kotlin/com/github/themartdev/intellijgleam/ide/highlighting/GleamSyntaxHighlighter.kt @@ -23,8 +23,7 @@ val ATTRIBUTES = buildMap { put(GleamTypes.MODULE_COMMENT, GleamColors.MODULE_COMMENT) put(GleamTypes.FUNCTION_COMMENT, GleamColors.FUNCTION_COMMENT) put(GleamTypes.FUNCTION_NAME_DEFINITION, GleamColors.FUNCTION_DECLARATION) -// put(GleamTypes.STRING_LITERAL, GleamColors.STRING) -// put(GleamTypes.STRING_ESCAPE_SEGMENT, GleamColors.STRING_ESCAPE) + put(GleamTypes.BASE_NUMBER_PREFIX, GleamColors.BASE_PREFIX) SyntaxHighlighterBase.fillMap(this, GLEAM_STRINGS, GleamColors.STRING) SyntaxHighlighterBase.fillMap(this, GLEAM_KEYWORDS, GleamColors.KEYWORD) @@ -32,5 +31,10 @@ val ATTRIBUTES = buildMap { SyntaxHighlighterBase.fillMap(this, GLEAM_BRACES, GleamColors.BRACES) SyntaxHighlighterBase.fillMap(this, GLEAM_PARENTHESES, GleamColors.PARENTHESES) SyntaxHighlighterBase.fillMap(this, GLEAM_ESCAPE, GleamColors.STRING_ESCAPE) + + SyntaxHighlighterBase.fillMap(this, GLEAM_VALID_DIGITS, GleamColors.VALID_DIGIT) + SyntaxHighlighterBase.fillMap(this, GLEAM_INVALID_DIGITS, GleamColors.INVALID_DIGIT) + SyntaxHighlighterBase.fillMap(this, GLEAM_VALID_BASE, GleamColors.VALID_BASE) + SyntaxHighlighterBase.fillMap(this, GLEAM_UNKNOWN_BASE, GleamColors.INVALID_BASE) } diff --git a/src/main/kotlin/com/github/themartdev/intellijgleam/lang/psi/GleamTokenType.kt b/src/main/kotlin/com/github/themartdev/intellijgleam/lang/psi/GleamTokenType.kt index 6606803..d6deddd 100644 --- a/src/main/kotlin/com/github/themartdev/intellijgleam/lang/psi/GleamTokenType.kt +++ b/src/main/kotlin/com/github/themartdev/intellijgleam/lang/psi/GleamTokenType.kt @@ -23,3 +23,8 @@ val GLEAM_COMMENTS = create(MODULE_COMMENT, FUNCTION_COMMENT, LINE_COMMENT) val GLEAM_STRINGS = create(OPEN_QUOTE, CLOSE_QUOTE, REGULAR_STRING_PART) val GLEAM_ESCAPE = create(ESCAPE, ESCAPE_CHAR, UNICODE_ESCAPE_CHAR, UNICODE_CODEPOINT) +val GLEAM_VALID_DIGITS = create(VALID_DECIMAL_DIGIT, VALID_BINARY_DIGIT, VALID_OCTAL_DIGIT, VALID_HEX_DIGIT) +val GLEAM_INVALID_DIGITS = create(INVALID_DECIMAL_DIGIT, INVALID_BINARY_DIGIT, INVALID_OCTAL_DIGIT, INVALID_HEX_DIGIT, INVALID_UNKNOWN_BASE_DIGIT) +val GLEAM_VALID_BASE = create(BINARY_NUMBER_BASE, OCTAL_NUMBER_BASE, HEX_NUMBER_BASE) +val GLEAM_UNKNOWN_BASE = create(UNKNOWN_NUMBER_BASE) + diff --git a/src/test/kotlin/com/github/themartdev/intellijgleam/lexer/GleamLexerTest.kt b/src/test/kotlin/com/github/themartdev/intellijgleam/lexer/GleamLexerTest.kt index 2336283..cc76f71 100644 --- a/src/test/kotlin/com/github/themartdev/intellijgleam/lexer/GleamLexerTest.kt +++ b/src/test/kotlin/com/github/themartdev/intellijgleam/lexer/GleamLexerTest.kt @@ -1,14 +1,19 @@ package com.github.themartdev.intellijgleam.lexer import com.github.themartdev.intellijgleam.lang.lexer.GleamLexer -import com.jetbrains.rd.util.string.PrettyPrinter -import com.jetbrains.rd.util.string.println import org.junit.Test class GleamLexerTest { @Test fun test() { val lexer = GleamLexer() - lexer.start("test") + lexer.start(""" + 1123_234.123e-12 + """.trimIndent()) + while (lexer.tokenType != null) { + println("${lexer.tokenType}: ${lexer.tokenText}") + lexer.advance() + } + } } \ No newline at end of file