// This is a generated file. Not intended for manual editing. package org.elixir_lang.parser; import com.intellij.lang.ASTNode; import com.intellij.lang.LightPsiParser; import com.intellij.lang.PsiBuilder; import com.intellij.lang.PsiBuilder.Marker; import com.intellij.lang.PsiParser; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; import static org.elixir_lang.grammar.parser.GeneratedParserUtilBase.*; import static org.elixir_lang.psi.ElixirTypes.*; @SuppressWarnings({"SimplifiableIfStatement", "UnusedAssignment"}) public class ElixirParser implements PsiParser, LightPsiParser { public ASTNode parse(IElementType t, PsiBuilder b) { parseLight(t, b); return b.getTreeBuilt(); } public void parseLight(IElementType t, PsiBuilder b) { boolean r; b = adapt_builder_(t, b, this, EXTENDS_SETS_); Marker m = enter_section_(b, 0, _COLLAPSE_, null); if (t == ACCESS_EXPRESSION) { r = accessExpression(b, 0); } else if (t == ADDITION_INFIX_OPERATOR) { r = additionInfixOperator(b, 0); } else if (t == ALIAS) { r = alias(b, 0); } else if (t == AND_INFIX_OPERATOR) { r = andInfixOperator(b, 0); } else if (t == ANONYMOUS_FUNCTION) { r = anonymousFunction(b, 0); } else if (t == ARROW_INFIX_OPERATOR) { r = arrowInfixOperator(b, 0); } else if (t == ASSOCIATIONS) { r = associations(b, 0); } else if (t == ASSOCIATIONS_BASE) { r = associationsBase(b, 0); } else if (t == AT_IDENTIFIER) { r = atIdentifier(b, 0); } else if (t == AT_NUMERIC_OPERATION) { r = atNumericOperation(b, 0); } else if (t == AT_PREFIX_OPERATOR) { r = atPrefixOperator(b, 0); } else if (t == ATOM) { r = atom(b, 0); } else if (t == ATOM_KEYWORD) { r = atomKeyword(b, 0); } else if (t == BINARY_DIGITS) { r = binaryDigits(b, 0); } else if (t == BINARY_WHOLE_NUMBER) { r = binaryWholeNumber(b, 0); } else if (t == BIT_STRING) { r = bitString(b, 0); } else if (t == BLOCK_IDENTIFIER) { r = blockIdentifier(b, 0); } else if (t == BLOCK_ITEM) { r = blockItem(b, 0); } else if (t == BLOCK_LIST) { r = blockList(b, 0); } else if (t == BRACKET_ARGUMENTS) { r = bracketArguments(b, 0); } else if (t == CAPTURE_NUMERIC_OPERATION) { r = captureNumericOperation(b, 0); } else if (t == CAPTURE_PREFIX_OPERATOR) { r = capturePrefixOperator(b, 0); } else if (t == CHAR_LIST_HEREDOC) { r = charListHeredoc(b, 0); } else if (t == CHAR_LIST_HEREDOC_LINE) { r = charListHeredocLine(b, 0); } else if (t == CHAR_LIST_LINE) { r = charListLine(b, 0); } else if (t == CHAR_TOKEN) { r = charToken(b, 0); } else if (t == COMPARISON_INFIX_OPERATOR) { r = comparisonInfixOperator(b, 0); } else if (t == CONTAINER_ASSOCIATION_OPERATION) { r = containerAssociationOperation(b, 0); } else if (t == DECIMAL_DIGITS) { r = decimalDigits(b, 0); } else if (t == DECIMAL_FLOAT) { r = decimalFloat(b, 0); } else if (t == DECIMAL_FLOAT_EXPONENT) { r = decimalFloatExponent(b, 0); } else if (t == DECIMAL_FLOAT_EXPONENT_SIGN) { r = decimalFloatExponentSign(b, 0); } else if (t == DECIMAL_FLOAT_FRACTIONAL) { r = decimalFloatFractional(b, 0); } else if (t == DECIMAL_FLOAT_INTEGRAL) { r = decimalFloatIntegral(b, 0); } else if (t == DECIMAL_WHOLE_NUMBER) { r = decimalWholeNumber(b, 0); } else if (t == DO_BLOCK) { r = doBlock(b, 0); } else if (t == DOT_INFIX_OPERATOR) { r = dotInfixOperator(b, 0); } else if (t == EMPTY_PARENTHESES) { r = emptyParentheses(b, 0); } else if (t == ENCLOSED_HEXADECIMAL_ESCAPE_SEQUENCE) { r = enclosedHexadecimalEscapeSequence(b, 0); } else if (t == END_OF_EXPRESSION) { r = endOfExpression(b, 0); } else if (t == ESCAPED_CHARACTER) { r = escapedCharacter(b, 0); } else if (t == ESCAPED_EOL) { r = escapedEOL(b, 0); } else if (t == HEREDOC_LINE_PREFIX) { r = heredocLinePrefix(b, 0); } else if (t == HEREDOC_PREFIX) { r = heredocPrefix(b, 0); } else if (t == HEXADECIMAL_DIGITS) { r = hexadecimalDigits(b, 0); } else if (t == HEXADECIMAL_ESCAPE_PREFIX) { r = hexadecimalEscapePrefix(b, 0); } else if (t == HEXADECIMAL_WHOLE_NUMBER) { r = hexadecimalWholeNumber(b, 0); } else if (t == IDENTIFIER) { r = identifier(b, 0); } else if (t == IN_INFIX_OPERATOR) { r = inInfixOperator(b, 0); } else if (t == IN_MATCH_INFIX_OPERATOR) { r = inMatchInfixOperator(b, 0); } else if (t == INTERPOLATED_CHAR_LIST_BODY) { r = interpolatedCharListBody(b, 0); } else if (t == INTERPOLATED_CHAR_LIST_HEREDOC_LINE) { r = interpolatedCharListHeredocLine(b, 0); } else if (t == INTERPOLATED_CHAR_LIST_SIGIL_HEREDOC) { r = interpolatedCharListSigilHeredoc(b, 0); } else if (t == INTERPOLATED_CHAR_LIST_SIGIL_LINE) { r = interpolatedCharListSigilLine(b, 0); } else if (t == INTERPOLATED_REGEX_BODY) { r = interpolatedRegexBody(b, 0); } else if (t == INTERPOLATED_REGEX_HEREDOC) { r = interpolatedRegexHeredoc(b, 0); } else if (t == INTERPOLATED_REGEX_HEREDOC_LINE) { r = interpolatedRegexHeredocLine(b, 0); } else if (t == INTERPOLATED_REGEX_LINE) { r = interpolatedRegexLine(b, 0); } else if (t == INTERPOLATED_SIGIL_BODY) { r = interpolatedSigilBody(b, 0); } else if (t == INTERPOLATED_SIGIL_HEREDOC) { r = interpolatedSigilHeredoc(b, 0); } else if (t == INTERPOLATED_SIGIL_HEREDOC_LINE) { r = interpolatedSigilHeredocLine(b, 0); } else if (t == INTERPOLATED_SIGIL_LINE) { r = interpolatedSigilLine(b, 0); } else if (t == INTERPOLATED_STRING_BODY) { r = interpolatedStringBody(b, 0); } else if (t == INTERPOLATED_STRING_HEREDOC_LINE) { r = interpolatedStringHeredocLine(b, 0); } else if (t == INTERPOLATED_STRING_SIGIL_HEREDOC) { r = interpolatedStringSigilHeredoc(b, 0); } else if (t == INTERPOLATED_STRING_SIGIL_LINE) { r = interpolatedStringSigilLine(b, 0); } else if (t == INTERPOLATED_WORDS_BODY) { r = interpolatedWordsBody(b, 0); } else if (t == INTERPOLATED_WORDS_HEREDOC) { r = interpolatedWordsHeredoc(b, 0); } else if (t == INTERPOLATED_WORDS_HEREDOC_LINE) { r = interpolatedWordsHeredocLine(b, 0); } else if (t == INTERPOLATED_WORDS_LINE) { r = interpolatedWordsLine(b, 0); } else if (t == INTERPOLATION) { r = interpolation(b, 0); } else if (t == KEYWORD_KEY) { r = keywordKey(b, 0); } else if (t == KEYWORD_PAIR) { r = keywordPair(b, 0); } else if (t == KEYWORDS) { r = keywords(b, 0); } else if (t == LIST) { r = list(b, 0); } else if (t == LITERAL_CHAR_LIST_BODY) { r = literalCharListBody(b, 0); } else if (t == LITERAL_CHAR_LIST_HEREDOC_LINE) { r = literalCharListHeredocLine(b, 0); } else if (t == LITERAL_CHAR_LIST_SIGIL_HEREDOC) { r = literalCharListSigilHeredoc(b, 0); } else if (t == LITERAL_CHAR_LIST_SIGIL_LINE) { r = literalCharListSigilLine(b, 0); } else if (t == LITERAL_REGEX_BODY) { r = literalRegexBody(b, 0); } else if (t == LITERAL_REGEX_HEREDOC) { r = literalRegexHeredoc(b, 0); } else if (t == LITERAL_REGEX_HEREDOC_LINE) { r = literalRegexHeredocLine(b, 0); } else if (t == LITERAL_REGEX_LINE) { r = literalRegexLine(b, 0); } else if (t == LITERAL_SIGIL_BODY) { r = literalSigilBody(b, 0); } else if (t == LITERAL_SIGIL_HEREDOC) { r = literalSigilHeredoc(b, 0); } else if (t == LITERAL_SIGIL_HEREDOC_LINE) { r = literalSigilHeredocLine(b, 0); } else if (t == LITERAL_SIGIL_LINE) { r = literalSigilLine(b, 0); } else if (t == LITERAL_STRING_BODY) { r = literalStringBody(b, 0); } else if (t == LITERAL_STRING_HEREDOC_LINE) { r = literalStringHeredocLine(b, 0); } else if (t == LITERAL_STRING_SIGIL_HEREDOC) { r = literalStringSigilHeredoc(b, 0); } else if (t == LITERAL_STRING_SIGIL_LINE) { r = literalStringSigilLine(b, 0); } else if (t == LITERAL_WORDS_BODY) { r = literalWordsBody(b, 0); } else if (t == LITERAL_WORDS_HEREDOC) { r = literalWordsHeredoc(b, 0); } else if (t == LITERAL_WORDS_HEREDOC_LINE) { r = literalWordsHeredocLine(b, 0); } else if (t == LITERAL_WORDS_LINE) { r = literalWordsLine(b, 0); } else if (t == MAP_ARGUMENTS) { r = mapArguments(b, 0); } else if (t == MAP_CONSTRUCTION_ARGUMENTS) { r = mapConstructionArguments(b, 0); } else if (t == MAP_OPERATION) { r = mapOperation(b, 0); } else if (t == MAP_PREFIX_OPERATOR) { r = mapPrefixOperator(b, 0); } else if (t == MAP_UPDATE_ARGUMENTS) { r = mapUpdateArguments(b, 0); } else if (t == MATCH_INFIX_OPERATOR) { r = matchInfixOperator(b, 0); } else if (t == MATCHED_EXPRESSION) { r = matchedExpression(b, 0, -1); } else if (t == MATCHED_PARENTHESES_ARGUMENTS) { r = matchedParenthesesArguments(b, 0); } else if (t == MULTIPLE_ALIASES) { r = multipleAliases(b, 0); } else if (t == MULTIPLICATION_INFIX_OPERATOR) { r = multiplicationInfixOperator(b, 0); } else if (t == NO_PARENTHESES_ARGUMENTS) { r = noParenthesesArguments(b, 0); } else if (t == NO_PARENTHESES_KEYWORD_PAIR) { r = noParenthesesKeywordPair(b, 0); } else if (t == NO_PARENTHESES_KEYWORDS) { r = noParenthesesKeywords(b, 0); } else if (t == NO_PARENTHESES_MANY_STRICT_NO_PARENTHESES_EXPRESSION) { r = noParenthesesManyStrictNoParenthesesExpression(b, 0); } else if (t == NO_PARENTHESES_ONE_ARGUMENT) { r = noParenthesesOneArgument(b, 0); } else if (t == NO_PARENTHESES_STRICT) { r = noParenthesesStrict(b, 0); } else if (t == OCTAL_DIGITS) { r = octalDigits(b, 0); } else if (t == OCTAL_WHOLE_NUMBER) { r = octalWholeNumber(b, 0); } else if (t == OPEN_HEXADECIMAL_ESCAPE_SEQUENCE) { r = openHexadecimalEscapeSequence(b, 0); } else if (t == OR_INFIX_OPERATOR) { r = orInfixOperator(b, 0); } else if (t == PARENTHESES_ARGUMENTS) { r = parenthesesArguments(b, 0); } else if (t == PARENTHETICAL_STAB) { r = parentheticalStab(b, 0); } else if (t == PIPE_INFIX_OPERATOR) { r = pipeInfixOperator(b, 0); } else if (t == QUOTE_CHAR_LIST_BODY) { r = quoteCharListBody(b, 0); } else if (t == QUOTE_HEXADECIMAL_ESCAPE_SEQUENCE) { r = quoteHexadecimalEscapeSequence(b, 0); } else if (t == QUOTE_STRING_BODY) { r = quoteStringBody(b, 0); } else if (t == RELATIONAL_INFIX_OPERATOR) { r = relationalInfixOperator(b, 0); } else if (t == RELATIVE_IDENTIFIER) { r = relativeIdentifier(b, 0); } else if (t == SIGIL_HEXADECIMAL_ESCAPE_SEQUENCE) { r = sigilHexadecimalEscapeSequence(b, 0); } else if (t == SIGIL_MODIFIERS) { r = sigilModifiers(b, 0); } else if (t == STAB) { r = stab(b, 0); } else if (t == STAB_BODY) { r = stabBody(b, 0); } else if (t == STAB_INFIX_OPERATOR) { r = stabInfixOperator(b, 0); } else if (t == STAB_NO_PARENTHESES_SIGNATURE) { r = stabNoParenthesesSignature(b, 0); } else if (t == STAB_OPERATION) { r = stabOperation(b, 0); } else if (t == STAB_PARENTHESES_SIGNATURE) { r = stabParenthesesSignature(b, 0); } else if (t == STRING_HEREDOC) { r = stringHeredoc(b, 0); } else if (t == STRING_HEREDOC_LINE) { r = stringHeredocLine(b, 0); } else if (t == STRING_LINE) { r = stringLine(b, 0); } else if (t == STRUCT_OPERATION) { r = structOperation(b, 0); } else if (t == THREE_INFIX_OPERATOR) { r = threeInfixOperator(b, 0); } else if (t == TUPLE) { r = tuple(b, 0); } else if (t == TWO_INFIX_OPERATOR) { r = twoInfixOperator(b, 0); } else if (t == TYPE_INFIX_OPERATOR) { r = typeInfixOperator(b, 0); } else if (t == UNARY_NUMERIC_OPERATION) { r = unaryNumericOperation(b, 0); } else if (t == UNARY_PREFIX_OPERATOR) { r = unaryPrefixOperator(b, 0); } else if (t == UNKNOWN_BASE_DIGITS) { r = unknownBaseDigits(b, 0); } else if (t == UNKNOWN_BASE_WHOLE_NUMBER) { r = unknownBaseWholeNumber(b, 0); } else if (t == UNMATCHED_EXPRESSION) { r = unmatchedExpression(b, 0, -1); } else if (t == UNQUALIFIED_NO_PARENTHESES_MANY_ARGUMENTS_CALL) { r = unqualifiedNoParenthesesManyArgumentsCall(b, 0); } else if (t == VARIABLE) { r = variable(b, 0); } else if (t == WHEN_INFIX_OPERATOR) { r = whenInfixOperator(b, 0); } else { r = parse_root_(t, b, 0); } exit_section_(b, 0, m, t, r, true, TRUE_CONDITION); } protected boolean parse_root_(IElementType t, PsiBuilder b, int l) { return elixirFile(b, l + 1); } public static final TokenSet[] EXTENDS_SETS_ = new TokenSet[] { create_token_set_(ACCESS_EXPRESSION, MATCHED_ADDITION_OPERATION, MATCHED_AND_OPERATION, MATCHED_ARROW_OPERATION, MATCHED_AT_NON_NUMERIC_OPERATION, MATCHED_AT_UNQUALIFIED_BRACKET_OPERATION, MATCHED_AT_UNQUALIFIED_NO_PARENTHESES_CALL, MATCHED_BRACKET_OPERATION, MATCHED_CAPTURE_NON_NUMERIC_OPERATION, MATCHED_COMPARISON_OPERATION, MATCHED_DOT_CALL, MATCHED_EXPRESSION, MATCHED_IN_MATCH_OPERATION, MATCHED_IN_OPERATION, MATCHED_MATCH_OPERATION, MATCHED_MULTIPLICATION_OPERATION, MATCHED_OR_OPERATION, MATCHED_PIPE_OPERATION, MATCHED_QUALIFIED_ALIAS, MATCHED_QUALIFIED_BRACKET_OPERATION, MATCHED_QUALIFIED_MULTIPLE_ALIASES, MATCHED_QUALIFIED_NO_ARGUMENTS_CALL, MATCHED_QUALIFIED_NO_PARENTHESES_CALL, MATCHED_QUALIFIED_PARENTHESES_CALL, MATCHED_RELATIONAL_OPERATION, MATCHED_THREE_OPERATION, MATCHED_TWO_OPERATION, MATCHED_TYPE_OPERATION, MATCHED_UNARY_NON_NUMERIC_OPERATION, MATCHED_UNQUALIFIED_BRACKET_OPERATION, MATCHED_UNQUALIFIED_NO_ARGUMENTS_CALL, MATCHED_UNQUALIFIED_NO_PARENTHESES_CALL, MATCHED_UNQUALIFIED_PARENTHESES_CALL, MATCHED_WHEN_OPERATION), create_token_set_(ACCESS_EXPRESSION, UNMATCHED_ADDITION_OPERATION, UNMATCHED_AND_OPERATION, UNMATCHED_ARROW_OPERATION, UNMATCHED_AT_NON_NUMERIC_OPERATION, UNMATCHED_AT_UNQUALIFIED_BRACKET_OPERATION, UNMATCHED_AT_UNQUALIFIED_NO_PARENTHESES_CALL, UNMATCHED_BRACKET_OPERATION, UNMATCHED_CAPTURE_NON_NUMERIC_OPERATION, UNMATCHED_COMPARISON_OPERATION, UNMATCHED_DOT_CALL, UNMATCHED_EXPRESSION, UNMATCHED_IN_MATCH_OPERATION, UNMATCHED_IN_OPERATION, UNMATCHED_MATCH_OPERATION, UNMATCHED_MULTIPLICATION_OPERATION, UNMATCHED_OR_OPERATION, UNMATCHED_PIPE_OPERATION, UNMATCHED_QUALIFIED_ALIAS, UNMATCHED_QUALIFIED_BRACKET_OPERATION, UNMATCHED_QUALIFIED_MULTIPLE_ALIASES, UNMATCHED_QUALIFIED_NO_ARGUMENTS_CALL, UNMATCHED_QUALIFIED_NO_PARENTHESES_CALL, UNMATCHED_QUALIFIED_PARENTHESES_CALL, UNMATCHED_RELATIONAL_OPERATION, UNMATCHED_THREE_OPERATION, UNMATCHED_TWO_OPERATION, UNMATCHED_TYPE_OPERATION, UNMATCHED_UNARY_NON_NUMERIC_OPERATION, UNMATCHED_UNQUALIFIED_BRACKET_OPERATION, UNMATCHED_UNQUALIFIED_NO_ARGUMENTS_CALL, UNMATCHED_UNQUALIFIED_NO_PARENTHESES_CALL, UNMATCHED_UNQUALIFIED_PARENTHESES_CALL, UNMATCHED_WHEN_OPERATION), }; /* ********************************************************** */ // atNumericOperation | // captureNumericOperation | // unaryNumericOperation | // anonymousFunction | // parentheticalStab | // numeric | // list | // map | // tuple | // bitString | // stringLine !KEYWORD_PAIR_COLON | // stringHeredoc | // charListLine !KEYWORD_PAIR_COLON | // charListHeredoc | // interpolatedCharListSigilLine | // interpolatedCharListSigilHeredoc | // interpolatedRegexHeredoc | // interpolatedSigilHeredoc | // interpolatedStringSigilHeredoc | // interpolatedWordsHeredoc | // interpolatedWordsLine | // interpolatedRegexLine | // interpolatedSigilLine | // interpolatedStringSigilLine | // literalCharListSigilLine | // literalCharListSigilHeredoc | // literalRegexHeredoc | // literalSigilHeredoc | // literalStringSigilHeredoc | // literalWordsHeredoc | // literalRegexLine | // literalSigilLine | // literalStringSigilLine | // literalWordsLine | // atomKeyword | // atom | // alias public static boolean accessExpression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "accessExpression")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, ACCESS_EXPRESSION, "<access expression>"); r = atNumericOperation(b, l + 1); if (!r) r = captureNumericOperation(b, l + 1); if (!r) r = unaryNumericOperation(b, l + 1); if (!r) r = anonymousFunction(b, l + 1); if (!r) r = parentheticalStab(b, l + 1); if (!r) r = numeric(b, l + 1); if (!r) r = list(b, l + 1); if (!r) r = map(b, l + 1); if (!r) r = tuple(b, l + 1); if (!r) r = bitString(b, l + 1); if (!r) r = accessExpression_10(b, l + 1); if (!r) r = stringHeredoc(b, l + 1); if (!r) r = accessExpression_12(b, l + 1); if (!r) r = charListHeredoc(b, l + 1); if (!r) r = interpolatedCharListSigilLine(b, l + 1); if (!r) r = interpolatedCharListSigilHeredoc(b, l + 1); if (!r) r = interpolatedRegexHeredoc(b, l + 1); if (!r) r = interpolatedSigilHeredoc(b, l + 1); if (!r) r = interpolatedStringSigilHeredoc(b, l + 1); if (!r) r = interpolatedWordsHeredoc(b, l + 1); if (!r) r = interpolatedWordsLine(b, l + 1); if (!r) r = interpolatedRegexLine(b, l + 1); if (!r) r = interpolatedSigilLine(b, l + 1); if (!r) r = interpolatedStringSigilLine(b, l + 1); if (!r) r = literalCharListSigilLine(b, l + 1); if (!r) r = literalCharListSigilHeredoc(b, l + 1); if (!r) r = literalRegexHeredoc(b, l + 1); if (!r) r = literalSigilHeredoc(b, l + 1); if (!r) r = literalStringSigilHeredoc(b, l + 1); if (!r) r = literalWordsHeredoc(b, l + 1); if (!r) r = literalRegexLine(b, l + 1); if (!r) r = literalSigilLine(b, l + 1); if (!r) r = literalStringSigilLine(b, l + 1); if (!r) r = literalWordsLine(b, l + 1); if (!r) r = atomKeyword(b, l + 1); if (!r) r = atom(b, l + 1); if (!r) r = alias(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // stringLine !KEYWORD_PAIR_COLON private static boolean accessExpression_10(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "accessExpression_10")) return false; boolean r; Marker m = enter_section_(b); r = stringLine(b, l + 1); r = r && accessExpression_10_1(b, l + 1); exit_section_(b, m, null, r); return r; } // !KEYWORD_PAIR_COLON private static boolean accessExpression_10_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "accessExpression_10_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeToken(b, KEYWORD_PAIR_COLON); exit_section_(b, l, m, r, false, null); return r; } // charListLine !KEYWORD_PAIR_COLON private static boolean accessExpression_12(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "accessExpression_12")) return false; boolean r; Marker m = enter_section_(b); r = charListLine(b, l + 1); r = r && accessExpression_12_1(b, l + 1); exit_section_(b, m, null, r); return r; } // !KEYWORD_PAIR_COLON private static boolean accessExpression_12_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "accessExpression_12_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeToken(b, KEYWORD_PAIR_COLON); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // (SIGNIFICANT_WHITE_SPACE DUAL_OPERATOR (SIGNIFICANT_WHITE_SPACE | &EOL) | // DUAL_OPERATOR) EOL* public static boolean additionInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "additionInfixOperator")) return false; if (!nextTokenIs(b, "<+, ->", DUAL_OPERATOR, SIGNIFICANT_WHITE_SPACE)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, ADDITION_INFIX_OPERATOR, "<+, ->"); r = additionInfixOperator_0(b, l + 1); r = r && additionInfixOperator_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // SIGNIFICANT_WHITE_SPACE DUAL_OPERATOR (SIGNIFICANT_WHITE_SPACE | &EOL) | // DUAL_OPERATOR private static boolean additionInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "additionInfixOperator_0")) return false; boolean r; Marker m = enter_section_(b); r = additionInfixOperator_0_0(b, l + 1); if (!r) r = consumeToken(b, DUAL_OPERATOR); exit_section_(b, m, null, r); return r; } // SIGNIFICANT_WHITE_SPACE DUAL_OPERATOR (SIGNIFICANT_WHITE_SPACE | &EOL) private static boolean additionInfixOperator_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "additionInfixOperator_0_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, SIGNIFICANT_WHITE_SPACE, DUAL_OPERATOR); r = r && additionInfixOperator_0_0_2(b, l + 1); exit_section_(b, m, null, r); return r; } // SIGNIFICANT_WHITE_SPACE | &EOL private static boolean additionInfixOperator_0_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "additionInfixOperator_0_0_2")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, SIGNIFICANT_WHITE_SPACE); if (!r) r = additionInfixOperator_0_0_2_1(b, l + 1); exit_section_(b, m, null, r); return r; } // &EOL private static boolean additionInfixOperator_0_0_2_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "additionInfixOperator_0_0_2_1")) return false; boolean r; Marker m = enter_section_(b, l, _AND_); r = consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean additionInfixOperator_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "additionInfixOperator_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "additionInfixOperator_1", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // SIGNIFICANT_WHITE_SPACE? DUAL_OPERATOR ( // // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_tokenizer.erl#L610 // "/" | ">" | DUAL_OPERATOR | STRUCT_OPERATOR | // // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_tokenizer.erl#L609 // OPENING_BIT | OPENING_BRACKET | OPENING_CURLY | OPENING_PARENTHESIS | // // white spaces // EOL | SIGNIFICANT_WHITE_SPACE // ) // | // DUAL_OPERATOR static boolean additionTail(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "additionTail")) return false; if (!nextTokenIs(b, "", DUAL_OPERATOR, SIGNIFICANT_WHITE_SPACE)) return false; boolean r; Marker m = enter_section_(b); r = additionTail_0(b, l + 1); if (!r) r = consumeToken(b, DUAL_OPERATOR); exit_section_(b, m, null, r); return r; } // SIGNIFICANT_WHITE_SPACE? DUAL_OPERATOR ( // // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_tokenizer.erl#L610 // "/" | ">" | DUAL_OPERATOR | STRUCT_OPERATOR | // // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_tokenizer.erl#L609 // OPENING_BIT | OPENING_BRACKET | OPENING_CURLY | OPENING_PARENTHESIS | // // white spaces // EOL | SIGNIFICANT_WHITE_SPACE // ) private static boolean additionTail_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "additionTail_0")) return false; boolean r; Marker m = enter_section_(b); r = additionTail_0_0(b, l + 1); r = r && consumeToken(b, DUAL_OPERATOR); r = r && additionTail_0_2(b, l + 1); exit_section_(b, m, null, r); return r; } // SIGNIFICANT_WHITE_SPACE? private static boolean additionTail_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "additionTail_0_0")) return false; consumeToken(b, SIGNIFICANT_WHITE_SPACE); return true; } // "/" | ">" | DUAL_OPERATOR | STRUCT_OPERATOR | // // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_tokenizer.erl#L609 // OPENING_BIT | OPENING_BRACKET | OPENING_CURLY | OPENING_PARENTHESIS | // // white spaces // EOL | SIGNIFICANT_WHITE_SPACE private static boolean additionTail_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "additionTail_0_2")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, "/"); if (!r) r = consumeToken(b, ">"); if (!r) r = consumeToken(b, DUAL_OPERATOR); if (!r) r = consumeToken(b, STRUCT_OPERATOR); if (!r) r = consumeToken(b, OPENING_BIT); if (!r) r = consumeToken(b, OPENING_BRACKET); if (!r) r = consumeToken(b, OPENING_CURLY); if (!r) r = consumeToken(b, OPENING_PARENTHESIS); if (!r) r = consumeToken(b, EOL); if (!r) r = consumeToken(b, SIGNIFICANT_WHITE_SPACE); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // ALIAS_TOKEN !KEYWORD_PAIR_COLON public static boolean alias(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "alias")) return false; if (!nextTokenIs(b, ALIAS_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, ALIAS_TOKEN); r = r && alias_1(b, l + 1); exit_section_(b, m, ALIAS, r); return r; } // !KEYWORD_PAIR_COLON private static boolean alias_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "alias_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeToken(b, KEYWORD_PAIR_COLON); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // EOL* AND_OPERATOR EOL* public static boolean andInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "andInfixOperator")) return false; if (!nextTokenIs(b, "<&&, &&&, and>", AND_OPERATOR, EOL)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, AND_INFIX_OPERATOR, "<&&, &&&, and>"); r = andInfixOperator_0(b, l + 1); r = r && consumeToken(b, AND_OPERATOR); r = r && andInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean andInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "andInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "andInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean andInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "andInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "andInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // FN endOfExpression? // stab endOfExpression? // END public static boolean anonymousFunction(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "anonymousFunction")) return false; if (!nextTokenIs(b, FN)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, FN); r = r && anonymousFunction_1(b, l + 1); r = r && stab(b, l + 1); r = r && anonymousFunction_3(b, l + 1); r = r && consumeToken(b, END); exit_section_(b, m, ANONYMOUS_FUNCTION, r); return r; } // endOfExpression? private static boolean anonymousFunction_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "anonymousFunction_1")) return false; endOfExpression(b, l + 1); return true; } // endOfExpression? private static boolean anonymousFunction_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "anonymousFunction_3")) return false; endOfExpression(b, l + 1); return true; } /* ********************************************************** */ // EOL* ARROW_OPERATOR EOL* public static boolean arrowInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "arrowInfixOperator")) return false; if (!nextTokenIs(b, "<<~, |>, ~>, <<<, <<~, <|>, <~>, >>>, ~>>>", ARROW_OPERATOR, EOL)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, ARROW_INFIX_OPERATOR, "<<~, |>, ~>, <<<, <<~, <|>, <~>, >>>, ~>>>"); r = arrowInfixOperator_0(b, l + 1); r = r && consumeToken(b, ARROW_OPERATOR); r = r && arrowInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean arrowInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "arrowInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "arrowInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean arrowInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "arrowInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "arrowInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // EOL* ASSOCIATION_OPERATOR EOL* static boolean associationInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "associationInfixOperator")) return false; if (!nextTokenIs(b, "", ASSOCIATION_OPERATOR, EOL)) return false; boolean r; Marker m = enter_section_(b); r = associationInfixOperator_0(b, l + 1); r = r && consumeToken(b, ASSOCIATION_OPERATOR); r = r && associationInfixOperator_2(b, l + 1); exit_section_(b, m, null, r); return r; } // EOL* private static boolean associationInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "associationInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "associationInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean associationInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "associationInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "associationInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // associationsBase infixComma? public static boolean associations(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "associations")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, ASSOCIATIONS, "<associations>"); r = associationsBase(b, l + 1); r = r && associations_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // infixComma? private static boolean associations_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "associations_1")) return false; infixComma(b, l + 1); return true; } /* ********************************************************** */ // associationsExpression (infixComma associationsExpression)* public static boolean associationsBase(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "associationsBase")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, ASSOCIATIONS_BASE, "<associations base>"); r = associationsExpression(b, l + 1); r = r && associationsBase_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // (infixComma associationsExpression)* private static boolean associationsBase_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "associationsBase_1")) return false; int c = current_position_(b); while (true) { if (!associationsBase_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "associationsBase_1", c)) break; c = current_position_(b); } return true; } // infixComma associationsExpression private static boolean associationsBase_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "associationsBase_1_0")) return false; boolean r; Marker m = enter_section_(b); r = infixComma(b, l + 1); r = r && associationsExpression(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // containerAssociationOperation | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L505 // mapExpression static boolean associationsExpression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "associationsExpression")) return false; boolean r; Marker m = enter_section_(b); r = containerAssociationOperation(b, l + 1); if (!r) r = mapExpression(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // atPrefixOperator IDENTIFIER_TOKEN public static boolean atIdentifier(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "atIdentifier")) return false; if (!nextTokenIs(b, AT_OPERATOR)) return false; boolean r; Marker m = enter_section_(b); r = atPrefixOperator(b, l + 1); r = r && consumeToken(b, IDENTIFIER_TOKEN); exit_section_(b, m, AT_IDENTIFIER, r); return r; } /* ********************************************************** */ // atPrefixOperator maxExpression public static boolean atMaxExpression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "atMaxExpression")) return false; if (!nextTokenIs(b, AT_OPERATOR)) return false; boolean r; Marker m = enter_section_(b); r = atPrefixOperator(b, l + 1); r = r && maxExpression(b, l + 1); exit_section_(b, m, MATCHED_AT_NON_NUMERIC_OPERATION, r); return r; } /* ********************************************************** */ // atPrefixOperator numeric public static boolean atNumericOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "atNumericOperation")) return false; if (!nextTokenIs(b, AT_OPERATOR)) return false; boolean r; Marker m = enter_section_(b); r = atPrefixOperator(b, l + 1); r = r && numeric(b, l + 1); exit_section_(b, m, AT_NUMERIC_OPERATION, r); return r; } /* ********************************************************** */ // AT_OPERATOR EOL* public static boolean atPrefixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "atPrefixOperator")) return false; if (!nextTokenIs(b, AT_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, AT_PREFIX_OPERATOR, "<@>"); r = consumeToken(b, AT_OPERATOR); r = r && atPrefixOperator_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean atPrefixOperator_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "atPrefixOperator_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "atPrefixOperator_1", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // COLON (ATOM_FRAGMENT | quote) public static boolean atom(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "atom")) return false; if (!nextTokenIs(b, COLON)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, COLON); r = r && atom_1(b, l + 1); exit_section_(b, m, ATOM, r); return r; } // ATOM_FRAGMENT | quote private static boolean atom_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "atom_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, ATOM_FRAGMENT); if (!r) r = quote(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // FALSE | NIL | TRUE public static boolean atomKeyword(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "atomKeyword")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, ATOM_KEYWORD, "<false, nil, true>"); r = consumeToken(b, FALSE); if (!r) r = consumeToken(b, NIL); if (!r) r = consumeToken(b, TRUE); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // INVALID_BINARY_DIGITS | VALID_BINARY_DIGITS public static boolean binaryDigits(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "binaryDigits")) return false; if (!nextTokenIs(b, "<binary digits>", INVALID_BINARY_DIGITS, VALID_BINARY_DIGITS)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, BINARY_DIGITS, "<binary digits>"); r = consumeToken(b, INVALID_BINARY_DIGITS); if (!r) r = consumeToken(b, VALID_BINARY_DIGITS); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // BASE_WHOLE_NUMBER_PREFIX (BINARY_WHOLE_NUMBER_BASE | OBSOLETE_BINARY_WHOLE_NUMBER_BASE) binaryDigits+ public static boolean binaryWholeNumber(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "binaryWholeNumber")) return false; if (!nextTokenIs(b, BASE_WHOLE_NUMBER_PREFIX)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, BINARY_WHOLE_NUMBER, null); r = consumeToken(b, BASE_WHOLE_NUMBER_PREFIX); r = r && binaryWholeNumber_1(b, l + 1); p = r; // pin = 2 r = r && binaryWholeNumber_2(b, l + 1); exit_section_(b, l, m, r, p, null); return r || p; } // BINARY_WHOLE_NUMBER_BASE | OBSOLETE_BINARY_WHOLE_NUMBER_BASE private static boolean binaryWholeNumber_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "binaryWholeNumber_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, BINARY_WHOLE_NUMBER_BASE); if (!r) r = consumeToken(b, OBSOLETE_BINARY_WHOLE_NUMBER_BASE); exit_section_(b, m, null, r); return r; } // binaryDigits+ private static boolean binaryWholeNumber_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "binaryWholeNumber_2")) return false; boolean r; Marker m = enter_section_(b); r = binaryDigits(b, l + 1); int c = current_position_(b); while (r) { if (!binaryDigits(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "binaryWholeNumber_2", c)) break; c = current_position_(b); } exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // OPENING_BIT EOL* // (containerArguments EOL*)? // CLOSING_BIT public static boolean bitString(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bitString")) return false; if (!nextTokenIs(b, OPENING_BIT)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, OPENING_BIT); r = r && bitString_1(b, l + 1); r = r && bitString_2(b, l + 1); r = r && consumeToken(b, CLOSING_BIT); exit_section_(b, m, BIT_STRING, r); return r; } // EOL* private static boolean bitString_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bitString_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "bitString_1", c)) break; c = current_position_(b); } return true; } // (containerArguments EOL*)? private static boolean bitString_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bitString_2")) return false; bitString_2_0(b, l + 1); return true; } // containerArguments EOL* private static boolean bitString_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bitString_2_0")) return false; boolean r; Marker m = enter_section_(b); r = containerArguments(b, l + 1); r = r && bitString_2_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // EOL* private static boolean bitString_2_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bitString_2_0_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "bitString_2_0_1", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // AFTER | CATCH | ELSE | RESCUE public static boolean blockIdentifier(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "blockIdentifier")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, BLOCK_IDENTIFIER, "<block identifier>"); r = consumeToken(b, AFTER); if (!r) r = consumeToken(b, CATCH); if (!r) r = consumeToken(b, ELSE); if (!r) r = consumeToken(b, RESCUE); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // blockIdentifier endOfExpression? // @see https://github.com/elixir-lang/elixir/blob/39b6789a8625071e149f0a7347ca7a2111f7c8f2/lib/elixir/src/elixir_parser.yrl#L290-L291 // (stab endOfExpression?)? public static boolean blockItem(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "blockItem")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, BLOCK_ITEM, "<block item>"); r = blockIdentifier(b, l + 1); r = r && blockItem_1(b, l + 1); r = r && blockItem_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // endOfExpression? private static boolean blockItem_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "blockItem_1")) return false; endOfExpression(b, l + 1); return true; } // (stab endOfExpression?)? private static boolean blockItem_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "blockItem_2")) return false; blockItem_2_0(b, l + 1); return true; } // stab endOfExpression? private static boolean blockItem_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "blockItem_2_0")) return false; boolean r; Marker m = enter_section_(b); r = stab(b, l + 1); r = r && blockItem_2_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // endOfExpression? private static boolean blockItem_2_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "blockItem_2_0_1")) return false; endOfExpression(b, l + 1); return true; } /* ********************************************************** */ // blockItem+ public static boolean blockList(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "blockList")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, BLOCK_LIST, "<block list>"); r = blockItem(b, l + 1); int c = current_position_(b); while (r) { if (!blockItem(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "blockList", c)) break; c = current_position_(b); } exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // OPENING_BRACKET EOL* // ( // keywords | // containerExpression infixComma? // ) // CLOSING_BRACKET public static boolean bracketArguments(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bracketArguments")) return false; if (!nextTokenIs(b, OPENING_BRACKET)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, OPENING_BRACKET); r = r && bracketArguments_1(b, l + 1); r = r && bracketArguments_2(b, l + 1); r = r && consumeToken(b, CLOSING_BRACKET); exit_section_(b, m, BRACKET_ARGUMENTS, r); return r; } // EOL* private static boolean bracketArguments_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bracketArguments_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "bracketArguments_1", c)) break; c = current_position_(b); } return true; } // keywords | // containerExpression infixComma? private static boolean bracketArguments_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bracketArguments_2")) return false; boolean r; Marker m = enter_section_(b); r = keywords(b, l + 1); if (!r) r = bracketArguments_2_1(b, l + 1); exit_section_(b, m, null, r); return r; } // containerExpression infixComma? private static boolean bracketArguments_2_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bracketArguments_2_1")) return false; boolean r; Marker m = enter_section_(b); r = containerExpression(b, l + 1); r = r && bracketArguments_2_1_1(b, l + 1); exit_section_(b, m, null, r); return r; } // infixComma? private static boolean bracketArguments_2_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "bracketArguments_2_1_1")) return false; infixComma(b, l + 1); return true; } /* ********************************************************** */ // capturePrefixOperator numeric public static boolean captureNumericOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "captureNumericOperation")) return false; if (!nextTokenIs(b, CAPTURE_OPERATOR)) return false; boolean r; Marker m = enter_section_(b); r = capturePrefixOperator(b, l + 1); r = r && numeric(b, l + 1); exit_section_(b, m, CAPTURE_NUMERIC_OPERATION, r); return r; } /* ********************************************************** */ // CAPTURE_OPERATOR EOL* public static boolean capturePrefixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "capturePrefixOperator")) return false; if (!nextTokenIs(b, CAPTURE_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, CAPTURE_PREFIX_OPERATOR, "<&>"); r = consumeToken(b, CAPTURE_OPERATOR); r = r && capturePrefixOperator_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean capturePrefixOperator_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "capturePrefixOperator_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "capturePrefixOperator_1", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // CHAR_LIST_HEREDOC_PROMOTER EOL // charListHeredocLine* // heredocPrefix CHAR_LIST_HEREDOC_TERMINATOR public static boolean charListHeredoc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "charListHeredoc")) return false; if (!nextTokenIs(b, CHAR_LIST_HEREDOC_PROMOTER)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, CHAR_LIST_HEREDOC, null); r = consumeTokens(b, 1, CHAR_LIST_HEREDOC_PROMOTER, EOL); p = r; // pin = 1 r = r && report_error_(b, charListHeredoc_2(b, l + 1)); r = p && report_error_(b, heredocPrefix(b, l + 1)) && r; r = p && consumeToken(b, CHAR_LIST_HEREDOC_TERMINATOR) && r; exit_section_(b, l, m, r, p, null); return r || p; } // charListHeredocLine* private static boolean charListHeredoc_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "charListHeredoc_2")) return false; int c = current_position_(b); while (true) { if (!charListHeredocLine(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "charListHeredoc_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // heredocLinePrefix quoteCharListBody EOL public static boolean charListHeredocLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "charListHeredocLine")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, CHAR_LIST_HEREDOC_LINE, "<char list heredoc line>"); r = heredocLinePrefix(b, l + 1); r = r && quoteCharListBody(b, l + 1); r = r && consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // CHAR_LIST_PROMOTER quoteCharListBody CHAR_LIST_TERMINATOR public static boolean charListLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "charListLine")) return false; if (!nextTokenIs(b, CHAR_LIST_PROMOTER)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, CHAR_LIST_PROMOTER); r = r && quoteCharListBody(b, l + 1); r = r && consumeToken(b, CHAR_LIST_TERMINATOR); exit_section_(b, m, CHAR_LIST_LINE, r); return r; } /* ********************************************************** */ // CHAR_TOKENIZER (CHAR_LIST_FRAGMENT | quoteEscapeSequence) public static boolean charToken(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "charToken")) return false; if (!nextTokenIs(b, CHAR_TOKENIZER)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, CHAR_TOKENIZER); r = r && charToken_1(b, l + 1); exit_section_(b, m, CHAR_TOKEN, r); return r; } // CHAR_LIST_FRAGMENT | quoteEscapeSequence private static boolean charToken_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "charToken_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, CHAR_LIST_FRAGMENT); if (!r) r = quoteEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // EOL* COMPARISON_OPERATOR EOL* public static boolean comparisonInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "comparisonInfixOperator")) return false; if (!nextTokenIs(b, "<!=, ==, =~, !==, ===>", COMPARISON_OPERATOR, EOL)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, COMPARISON_INFIX_OPERATOR, "<!=, ==, =~, !==, ===>"); r = comparisonInfixOperator_0(b, l + 1); r = r && consumeToken(b, COMPARISON_OPERATOR); r = r && comparisonInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean comparisonInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "comparisonInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "comparisonInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean comparisonInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "comparisonInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "comparisonInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // containerArgumentsBase (infixComma keywords | infixComma)? static boolean containerArguments(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "containerArguments")) return false; boolean r; Marker m = enter_section_(b); r = containerArgumentsBase(b, l + 1); r = r && containerArguments_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (infixComma keywords | infixComma)? private static boolean containerArguments_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "containerArguments_1")) return false; containerArguments_1_0(b, l + 1); return true; } // infixComma keywords | infixComma private static boolean containerArguments_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "containerArguments_1_0")) return false; boolean r; Marker m = enter_section_(b); r = containerArguments_1_0_0(b, l + 1); if (!r) r = infixComma(b, l + 1); exit_section_(b, m, null, r); return r; } // infixComma keywords private static boolean containerArguments_1_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "containerArguments_1_0_0")) return false; boolean r; Marker m = enter_section_(b); r = infixComma(b, l + 1); r = r && keywords(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // containerExpression (infixComma containerExpression)* static boolean containerArgumentsBase(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "containerArgumentsBase")) return false; boolean r; Marker m = enter_section_(b); r = containerExpression(b, l + 1); r = r && containerArgumentsBase_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (infixComma containerExpression)* private static boolean containerArgumentsBase_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "containerArgumentsBase_1")) return false; int c = current_position_(b); while (true) { if (!containerArgumentsBase_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "containerArgumentsBase_1", c)) break; c = current_position_(b); } return true; } // infixComma containerExpression private static boolean containerArgumentsBase_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "containerArgumentsBase_1_0")) return false; boolean r; Marker m = enter_section_(b); r = infixComma(b, l + 1); r = r && containerExpression(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // containerExpression associationInfixOperator containerExpression public static boolean containerAssociationOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "containerAssociationOperation")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, CONTAINER_ASSOCIATION_OPERATION, "<container association operation>"); r = containerExpression(b, l + 1); r = r && associationInfixOperator(b, l + 1); r = r && containerExpression(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // emptyParentheses | // unmatchedExpression static boolean containerExpression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "containerExpression")) return false; boolean r; Marker m = enter_section_(b); r = emptyParentheses(b, l + 1); if (!r) r = unmatchedExpression(b, l + 1, -1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // INVALID_DECIMAL_DIGITS | VALID_DECIMAL_DIGITS public static boolean decimalDigits(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "decimalDigits")) return false; if (!nextTokenIs(b, "<decimal digits>", INVALID_DECIMAL_DIGITS, VALID_DECIMAL_DIGITS)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, DECIMAL_DIGITS, "<decimal digits>"); r = consumeToken(b, INVALID_DECIMAL_DIGITS); if (!r) r = consumeToken(b, VALID_DECIMAL_DIGITS); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // decimalFloatIntegral DECIMAL_MARK decimalFloatFractional (EXPONENT_MARK decimalFloatExponent)? public static boolean decimalFloat(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "decimalFloat")) return false; if (!nextTokenIs(b, "<decimal float>", INVALID_DECIMAL_DIGITS, VALID_DECIMAL_DIGITS)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, DECIMAL_FLOAT, "<decimal float>"); r = decimalFloatIntegral(b, l + 1); r = r && consumeToken(b, DECIMAL_MARK); r = r && decimalFloatFractional(b, l + 1); r = r && decimalFloat_3(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // (EXPONENT_MARK decimalFloatExponent)? private static boolean decimalFloat_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "decimalFloat_3")) return false; decimalFloat_3_0(b, l + 1); return true; } // EXPONENT_MARK decimalFloatExponent private static boolean decimalFloat_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "decimalFloat_3_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, EXPONENT_MARK); r = r && decimalFloatExponent(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // decimalFloatExponentSign decimalWholeNumber public static boolean decimalFloatExponent(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "decimalFloatExponent")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, DECIMAL_FLOAT_EXPONENT, "<decimal float exponent>"); r = decimalFloatExponentSign(b, l + 1); r = r && decimalWholeNumber(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // DUAL_OPERATOR? public static boolean decimalFloatExponentSign(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "decimalFloatExponentSign")) return false; Marker m = enter_section_(b, l, _NONE_, DECIMAL_FLOAT_EXPONENT_SIGN, "<decimal float exponent sign>"); consumeToken(b, DUAL_OPERATOR); exit_section_(b, l, m, true, false, null); return true; } /* ********************************************************** */ // decimalWholeNumber public static boolean decimalFloatFractional(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "decimalFloatFractional")) return false; if (!nextTokenIs(b, "<decimal float fractional>", INVALID_DECIMAL_DIGITS, VALID_DECIMAL_DIGITS)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, DECIMAL_FLOAT_FRACTIONAL, "<decimal float fractional>"); r = decimalWholeNumber(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // decimalWholeNumber public static boolean decimalFloatIntegral(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "decimalFloatIntegral")) return false; if (!nextTokenIs(b, "<decimal float integral>", INVALID_DECIMAL_DIGITS, VALID_DECIMAL_DIGITS)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, DECIMAL_FLOAT_INTEGRAL, "<decimal float integral>"); r = decimalWholeNumber(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // decimalDigits (DECIMAL_SEPARATOR? decimalDigits)* public static boolean decimalWholeNumber(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "decimalWholeNumber")) return false; if (!nextTokenIs(b, "<decimal whole number>", INVALID_DECIMAL_DIGITS, VALID_DECIMAL_DIGITS)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, DECIMAL_WHOLE_NUMBER, "<decimal whole number>"); r = decimalDigits(b, l + 1); r = r && decimalWholeNumber_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // (DECIMAL_SEPARATOR? decimalDigits)* private static boolean decimalWholeNumber_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "decimalWholeNumber_1")) return false; int c = current_position_(b); while (true) { if (!decimalWholeNumber_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "decimalWholeNumber_1", c)) break; c = current_position_(b); } return true; } // DECIMAL_SEPARATOR? decimalDigits private static boolean decimalWholeNumber_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "decimalWholeNumber_1_0")) return false; boolean r; Marker m = enter_section_(b); r = decimalWholeNumber_1_0_0(b, l + 1); r = r && decimalDigits(b, l + 1); exit_section_(b, m, null, r); return r; } // DECIMAL_SEPARATOR? private static boolean decimalWholeNumber_1_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "decimalWholeNumber_1_0_0")) return false; consumeToken(b, DECIMAL_SEPARATOR); return true; } /* ********************************************************** */ // EOL* DO endOfExpression? // stab? endOfExpression? // @see https://github.com/elixir-lang/elixir/blob/39b6789a8625071e149f0a7347ca7a2111f7c8f2/lib/elixir/src/elixir_parser.yrl#L273 // blockList? endOfExpression? // @see https://github.com/elixir-lang/elixir/blob/39b6789a8625071e149f0a7347ca7a2111f7c8f2/lib/elixir/src/elixir_parser.yrl#L274 // END public static boolean doBlock(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "doBlock")) return false; if (!nextTokenIs(b, "<do block>", DO, EOL)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, DO_BLOCK, "<do block>"); r = doBlock_0(b, l + 1); r = r && consumeToken(b, DO); p = r; // pin = DO r = r && report_error_(b, doBlock_2(b, l + 1)); r = p && report_error_(b, doBlock_3(b, l + 1)) && r; r = p && report_error_(b, doBlock_4(b, l + 1)) && r; r = p && report_error_(b, doBlock_5(b, l + 1)) && r; r = p && report_error_(b, doBlock_6(b, l + 1)) && r; r = p && consumeToken(b, END) && r; exit_section_(b, l, m, r, p, null); return r || p; } // EOL* private static boolean doBlock_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "doBlock_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "doBlock_0", c)) break; c = current_position_(b); } return true; } // endOfExpression? private static boolean doBlock_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "doBlock_2")) return false; endOfExpression(b, l + 1); return true; } // stab? private static boolean doBlock_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "doBlock_3")) return false; stab(b, l + 1); return true; } // endOfExpression? private static boolean doBlock_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "doBlock_4")) return false; endOfExpression(b, l + 1); return true; } // blockList? private static boolean doBlock_5(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "doBlock_5")) return false; blockList(b, l + 1); return true; } // endOfExpression? private static boolean doBlock_6(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "doBlock_6")) return false; endOfExpression(b, l + 1); return true; } /* ********************************************************** */ // EOL* DOT_OPERATOR EOL* public static boolean dotInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "dotInfixOperator")) return false; if (!nextTokenIs(b, "<.>", DOT_OPERATOR, EOL)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, DOT_INFIX_OPERATOR, "<.>"); r = dotInfixOperator_0(b, l + 1); r = r && consumeToken(b, DOT_OPERATOR); r = r && dotInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean dotInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "dotInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "dotInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean dotInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "dotInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "dotInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // endOfExpression? (expressionList endOfExpression?)? static boolean elixirFile(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "elixirFile")) return false; boolean r; Marker m = enter_section_(b); r = elixirFile_0(b, l + 1); r = r && elixirFile_1(b, l + 1); exit_section_(b, m, null, r); return r; } // endOfExpression? private static boolean elixirFile_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "elixirFile_0")) return false; endOfExpression(b, l + 1); return true; } // (expressionList endOfExpression?)? private static boolean elixirFile_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "elixirFile_1")) return false; elixirFile_1_0(b, l + 1); return true; } // expressionList endOfExpression? private static boolean elixirFile_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "elixirFile_1_0")) return false; boolean r; Marker m = enter_section_(b); r = expressionList(b, l + 1); r = r && elixirFile_1_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // endOfExpression? private static boolean elixirFile_1_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "elixirFile_1_0_1")) return false; endOfExpression(b, l + 1); return true; } /* ********************************************************** */ // OPENING_PARENTHESIS EOL* CLOSING_PARENTHESIS public static boolean emptyParentheses(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "emptyParentheses")) return false; if (!nextTokenIs(b, OPENING_PARENTHESIS)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, OPENING_PARENTHESIS); r = r && emptyParentheses_1(b, l + 1); r = r && consumeToken(b, CLOSING_PARENTHESIS); exit_section_(b, m, EMPTY_PARENTHESES, r); return r; } // EOL* private static boolean emptyParentheses_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "emptyParentheses_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "emptyParentheses_1", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // OPENING_CURLY VALID_HEXADECIMAL_DIGITS CLOSING_CURLY public static boolean enclosedHexadecimalEscapeSequence(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "enclosedHexadecimalEscapeSequence")) return false; if (!nextTokenIs(b, OPENING_CURLY)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, ENCLOSED_HEXADECIMAL_ESCAPE_SEQUENCE, null); r = consumeTokens(b, 1, OPENING_CURLY, VALID_HEXADECIMAL_DIGITS, CLOSING_CURLY); p = r; // pin = 1 exit_section_(b, l, m, r, p, null); return r || p; } /* ********************************************************** */ // infixSemicolon | EOL+ public static boolean endOfExpression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "endOfExpression")) return false; if (!nextTokenIs(b, "<end of expression>", EOL, SEMICOLON)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, END_OF_EXPRESSION, "<end of expression>"); r = infixSemicolon(b, l + 1); if (!r) r = endOfExpression_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL+ private static boolean endOfExpression_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "endOfExpression_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, EOL); int c = current_position_(b); while (r) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "endOfExpression_1", c)) break; c = current_position_(b); } exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // ESCAPE ESCAPED_CHARACTER_TOKEN public static boolean escapedCharacter(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "escapedCharacter")) return false; if (!nextTokenIs(b, ESCAPE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, ESCAPED_CHARACTER, null); r = consumeTokens(b, 1, ESCAPE, ESCAPED_CHARACTER_TOKEN); p = r; // pin = 1 exit_section_(b, l, m, r, p, null); return r || p; } /* ********************************************************** */ // ESCAPE EOL public static boolean escapedEOL(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "escapedEOL")) return false; if (!nextTokenIs(b, ESCAPE)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, ESCAPE, EOL); exit_section_(b, m, ESCAPED_EOL, r); return r; } /* ********************************************************** */ // emptyParentheses | // unmatchedExpression | // unqualifiedNoParenthesesManyArgumentsCall static boolean expression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expression")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_); r = emptyParentheses(b, l + 1); if (!r) r = unmatchedExpression(b, l + 1, -1); if (!r) r = unqualifiedNoParenthesesManyArgumentsCall(b, l + 1); exit_section_(b, l, m, r, false, expressionRecoverWhile_parser_); return r; } /* ********************************************************** */ // expression (endOfExpression expression)* static boolean expressionList(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expressionList")) return false; boolean r; Marker m = enter_section_(b); r = expression(b, l + 1); r = r && expressionList_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (endOfExpression expression)* private static boolean expressionList_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expressionList_1")) return false; int c = current_position_(b); while (true) { if (!expressionList_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "expressionList_1", c)) break; c = current_position_(b); } return true; } // endOfExpression expression private static boolean expressionList_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expressionList_1_0")) return false; boolean r; Marker m = enter_section_(b); r = endOfExpression(b, l + 1); r = r && expression(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // !(EOL | CLOSING_BIT | CLOSING_BRACKET | CLOSING_CURLY | CLOSING_PARENTHESIS | INTERPOLATION_END | SEMICOLON | STAB_OPERATOR | END | blockIdentifier) static boolean expressionRecoverWhile(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expressionRecoverWhile")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !expressionRecoverWhile_0(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL | CLOSING_BIT | CLOSING_BRACKET | CLOSING_CURLY | CLOSING_PARENTHESIS | INTERPOLATION_END | SEMICOLON | STAB_OPERATOR | END | blockIdentifier private static boolean expressionRecoverWhile_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "expressionRecoverWhile_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, EOL); if (!r) r = consumeToken(b, CLOSING_BIT); if (!r) r = consumeToken(b, CLOSING_BRACKET); if (!r) r = consumeToken(b, CLOSING_CURLY); if (!r) r = consumeToken(b, CLOSING_PARENTHESIS); if (!r) r = consumeToken(b, INTERPOLATION_END); if (!r) r = consumeToken(b, SEMICOLON); if (!r) r = consumeToken(b, STAB_OPERATOR); if (!r) r = consumeToken(b, END); if (!r) r = blockIdentifier(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // HEREDOC_LINE_WHITE_SPACE_TOKEN? public static boolean heredocLinePrefix(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "heredocLinePrefix")) return false; Marker m = enter_section_(b, l, _NONE_, HEREDOC_LINE_PREFIX, "<heredoc line prefix>"); consumeToken(b, HEREDOC_LINE_WHITE_SPACE_TOKEN); exit_section_(b, l, m, true, false, null); return true; } /* ********************************************************** */ // HEREDOC_PREFIX_WHITE_SPACE? public static boolean heredocPrefix(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "heredocPrefix")) return false; Marker m = enter_section_(b, l, _NONE_, HEREDOC_PREFIX, "<heredoc prefix>"); consumeToken(b, HEREDOC_PREFIX_WHITE_SPACE); exit_section_(b, l, m, true, false, null); return true; } /* ********************************************************** */ // INVALID_HEXADECIMAL_DIGITS | VALID_HEXADECIMAL_DIGITS public static boolean hexadecimalDigits(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "hexadecimalDigits")) return false; if (!nextTokenIs(b, "<hexadecimal digits>", INVALID_HEXADECIMAL_DIGITS, VALID_HEXADECIMAL_DIGITS)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, HEXADECIMAL_DIGITS, "<hexadecimal digits>"); r = consumeToken(b, INVALID_HEXADECIMAL_DIGITS); if (!r) r = consumeToken(b, VALID_HEXADECIMAL_DIGITS); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // ESCAPE (HEXADECIMAL_WHOLE_NUMBER_BASE | UNICODE_ESCAPE_CHARACTER) public static boolean hexadecimalEscapePrefix(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "hexadecimalEscapePrefix")) return false; if (!nextTokenIs(b, ESCAPE)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, ESCAPE); r = r && hexadecimalEscapePrefix_1(b, l + 1); exit_section_(b, m, HEXADECIMAL_ESCAPE_PREFIX, r); return r; } // HEXADECIMAL_WHOLE_NUMBER_BASE | UNICODE_ESCAPE_CHARACTER private static boolean hexadecimalEscapePrefix_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "hexadecimalEscapePrefix_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, HEXADECIMAL_WHOLE_NUMBER_BASE); if (!r) r = consumeToken(b, UNICODE_ESCAPE_CHARACTER); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // BASE_WHOLE_NUMBER_PREFIX (HEXADECIMAL_WHOLE_NUMBER_BASE | OBSOLETE_HEXADECIMAL_WHOLE_NUMBER_BASE) hexadecimalDigits+ public static boolean hexadecimalWholeNumber(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "hexadecimalWholeNumber")) return false; if (!nextTokenIs(b, BASE_WHOLE_NUMBER_PREFIX)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, HEXADECIMAL_WHOLE_NUMBER, null); r = consumeToken(b, BASE_WHOLE_NUMBER_PREFIX); r = r && hexadecimalWholeNumber_1(b, l + 1); p = r; // pin = 2 r = r && hexadecimalWholeNumber_2(b, l + 1); exit_section_(b, l, m, r, p, null); return r || p; } // HEXADECIMAL_WHOLE_NUMBER_BASE | OBSOLETE_HEXADECIMAL_WHOLE_NUMBER_BASE private static boolean hexadecimalWholeNumber_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "hexadecimalWholeNumber_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, HEXADECIMAL_WHOLE_NUMBER_BASE); if (!r) r = consumeToken(b, OBSOLETE_HEXADECIMAL_WHOLE_NUMBER_BASE); exit_section_(b, m, null, r); return r; } // hexadecimalDigits+ private static boolean hexadecimalWholeNumber_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "hexadecimalWholeNumber_2")) return false; boolean r; Marker m = enter_section_(b); r = hexadecimalDigits(b, l + 1); int c = current_position_(b); while (r) { if (!hexadecimalDigits(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "hexadecimalWholeNumber_2", c)) break; c = current_position_(b); } exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // IDENTIFIER_TOKEN public static boolean identifier(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "identifier")) return false; if (!nextTokenIs(b, IDENTIFIER_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, IDENTIFIER_TOKEN); exit_section_(b, m, IDENTIFIER, r); return r; } /* ********************************************************** */ // EOL* IN_OPERATOR EOL* public static boolean inInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "inInfixOperator")) return false; if (!nextTokenIs(b, "<in>", EOL, IN_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, IN_INFIX_OPERATOR, "<in>"); r = inInfixOperator_0(b, l + 1); r = r && consumeToken(b, IN_OPERATOR); r = r && inInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean inInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "inInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "inInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean inInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "inInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "inInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // EOL* IN_MATCH_OPERATOR EOL* public static boolean inMatchInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "inMatchInfixOperator")) return false; if (!nextTokenIs(b, "<<-, \\\\>", EOL, IN_MATCH_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, IN_MATCH_INFIX_OPERATOR, "<<-, \\\\>"); r = inMatchInfixOperator_0(b, l + 1); r = r && consumeToken(b, IN_MATCH_OPERATOR); r = r && inMatchInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean inMatchInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "inMatchInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "inMatchInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean inMatchInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "inMatchInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "inMatchInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // COMMA EOL* static boolean infixComma(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "infixComma")) return false; if (!nextTokenIs(b, COMMA)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, COMMA); r = r && infixComma_1(b, l + 1); exit_section_(b, m, null, r); return r; } // EOL* private static boolean infixComma_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "infixComma_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "infixComma_1", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // EOL* SEMICOLON EOL* static boolean infixSemicolon(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "infixSemicolon")) return false; if (!nextTokenIs(b, "", EOL, SEMICOLON)) return false; boolean r; Marker m = enter_section_(b); r = infixSemicolon_0(b, l + 1); r = r && consumeToken(b, SEMICOLON); r = r && infixSemicolon_2(b, l + 1); exit_section_(b, m, null, r); return r; } // EOL* private static boolean infixSemicolon_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "infixSemicolon_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "infixSemicolon_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean infixSemicolon_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "infixSemicolon_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "infixSemicolon_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // (interpolation | CHAR_LIST_FRAGMENT | sigilEscapeSequence)* public static boolean interpolatedCharListBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedCharListBody")) return false; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_CHAR_LIST_BODY, "<interpolated char list body>"); int c = current_position_(b); while (true) { if (!interpolatedCharListBody_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "interpolatedCharListBody", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } // interpolation | CHAR_LIST_FRAGMENT | sigilEscapeSequence private static boolean interpolatedCharListBody_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedCharListBody_0")) return false; boolean r; Marker m = enter_section_(b); r = interpolation(b, l + 1); if (!r) r = consumeToken(b, CHAR_LIST_FRAGMENT); if (!r) r = sigilEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // heredocLinePrefix interpolatedCharListBody EOL public static boolean interpolatedCharListHeredocLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedCharListHeredocLine")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_CHAR_LIST_HEREDOC_LINE, "<interpolated char list heredoc line>"); r = heredocLinePrefix(b, l + 1); r = r && interpolatedCharListBody(b, l + 1); r = r && consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // TILDE INTERPOLATING_CHAR_LIST_SIGIL_NAME CHAR_LIST_SIGIL_HEREDOC_PROMOTER EOL // interpolatedCharListHeredocLine* // heredocPrefix CHAR_LIST_SIGIL_HEREDOC_TERMINATOR sigilModifiers public static boolean interpolatedCharListSigilHeredoc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedCharListSigilHeredoc")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_CHAR_LIST_SIGIL_HEREDOC, null); r = consumeTokens(b, 3, TILDE, INTERPOLATING_CHAR_LIST_SIGIL_NAME, CHAR_LIST_SIGIL_HEREDOC_PROMOTER, EOL); p = r; // pin = 3 r = r && report_error_(b, interpolatedCharListSigilHeredoc_4(b, l + 1)); r = p && report_error_(b, heredocPrefix(b, l + 1)) && r; r = p && report_error_(b, consumeToken(b, CHAR_LIST_SIGIL_HEREDOC_TERMINATOR)) && r; r = p && sigilModifiers(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // interpolatedCharListHeredocLine* private static boolean interpolatedCharListSigilHeredoc_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedCharListSigilHeredoc_4")) return false; int c = current_position_(b); while (true) { if (!interpolatedCharListHeredocLine(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "interpolatedCharListSigilHeredoc_4", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // TILDE INTERPOLATING_CHAR_LIST_SIGIL_NAME CHAR_LIST_SIGIL_PROMOTER interpolatedCharListBody CHAR_LIST_SIGIL_TERMINATOR sigilModifiers public static boolean interpolatedCharListSigilLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedCharListSigilLine")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, TILDE, INTERPOLATING_CHAR_LIST_SIGIL_NAME, CHAR_LIST_SIGIL_PROMOTER); r = r && interpolatedCharListBody(b, l + 1); r = r && consumeToken(b, CHAR_LIST_SIGIL_TERMINATOR); r = r && sigilModifiers(b, l + 1); exit_section_(b, m, INTERPOLATED_CHAR_LIST_SIGIL_LINE, r); return r; } /* ********************************************************** */ // (interpolation | REGEX_FRAGMENT | sigilEscapeSequence)* public static boolean interpolatedRegexBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedRegexBody")) return false; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_REGEX_BODY, "<interpolated regex body>"); int c = current_position_(b); while (true) { if (!interpolatedRegexBody_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "interpolatedRegexBody", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } // interpolation | REGEX_FRAGMENT | sigilEscapeSequence private static boolean interpolatedRegexBody_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedRegexBody_0")) return false; boolean r; Marker m = enter_section_(b); r = interpolation(b, l + 1); if (!r) r = consumeToken(b, REGEX_FRAGMENT); if (!r) r = sigilEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // TILDE INTERPOLATING_REGEX_SIGIL_NAME REGEX_HEREDOC_PROMOTER EOL // interpolatedRegexHeredocLine* // heredocPrefix REGEX_HEREDOC_TERMINATOR sigilModifiers public static boolean interpolatedRegexHeredoc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedRegexHeredoc")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_REGEX_HEREDOC, null); r = consumeTokens(b, 3, TILDE, INTERPOLATING_REGEX_SIGIL_NAME, REGEX_HEREDOC_PROMOTER, EOL); p = r; // pin = 3 r = r && report_error_(b, interpolatedRegexHeredoc_4(b, l + 1)); r = p && report_error_(b, heredocPrefix(b, l + 1)) && r; r = p && report_error_(b, consumeToken(b, REGEX_HEREDOC_TERMINATOR)) && r; r = p && sigilModifiers(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // interpolatedRegexHeredocLine* private static boolean interpolatedRegexHeredoc_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedRegexHeredoc_4")) return false; int c = current_position_(b); while (true) { if (!interpolatedRegexHeredocLine(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "interpolatedRegexHeredoc_4", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // heredocLinePrefix interpolatedRegexBody EOL public static boolean interpolatedRegexHeredocLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedRegexHeredocLine")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_REGEX_HEREDOC_LINE, "<interpolated regex heredoc line>"); r = heredocLinePrefix(b, l + 1); r = r && interpolatedRegexBody(b, l + 1); r = r && consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // TILDE INTERPOLATING_REGEX_SIGIL_NAME REGEX_PROMOTER interpolatedRegexBody REGEX_TERMINATOR sigilModifiers public static boolean interpolatedRegexLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedRegexLine")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, TILDE, INTERPOLATING_REGEX_SIGIL_NAME, REGEX_PROMOTER); r = r && interpolatedRegexBody(b, l + 1); r = r && consumeToken(b, REGEX_TERMINATOR); r = r && sigilModifiers(b, l + 1); exit_section_(b, m, INTERPOLATED_REGEX_LINE, r); return r; } /* ********************************************************** */ // (interpolation | SIGIL_FRAGMENT | sigilEscapeSequence)* public static boolean interpolatedSigilBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedSigilBody")) return false; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_SIGIL_BODY, "<interpolated sigil body>"); int c = current_position_(b); while (true) { if (!interpolatedSigilBody_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "interpolatedSigilBody", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } // interpolation | SIGIL_FRAGMENT | sigilEscapeSequence private static boolean interpolatedSigilBody_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedSigilBody_0")) return false; boolean r; Marker m = enter_section_(b); r = interpolation(b, l + 1); if (!r) r = consumeToken(b, SIGIL_FRAGMENT); if (!r) r = sigilEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // TILDE INTERPOLATING_SIGIL_NAME SIGIL_HEREDOC_PROMOTER EOL // interpolatedSigilHeredocLine* // heredocPrefix SIGIL_HEREDOC_TERMINATOR sigilModifiers public static boolean interpolatedSigilHeredoc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedSigilHeredoc")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_SIGIL_HEREDOC, null); r = consumeTokens(b, 3, TILDE, INTERPOLATING_SIGIL_NAME, SIGIL_HEREDOC_PROMOTER, EOL); p = r; // pin = 3 r = r && report_error_(b, interpolatedSigilHeredoc_4(b, l + 1)); r = p && report_error_(b, heredocPrefix(b, l + 1)) && r; r = p && report_error_(b, consumeToken(b, SIGIL_HEREDOC_TERMINATOR)) && r; r = p && sigilModifiers(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // interpolatedSigilHeredocLine* private static boolean interpolatedSigilHeredoc_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedSigilHeredoc_4")) return false; int c = current_position_(b); while (true) { if (!interpolatedSigilHeredocLine(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "interpolatedSigilHeredoc_4", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // heredocLinePrefix interpolatedSigilBody EOL public static boolean interpolatedSigilHeredocLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedSigilHeredocLine")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_SIGIL_HEREDOC_LINE, "<interpolated sigil heredoc line>"); r = heredocLinePrefix(b, l + 1); r = r && interpolatedSigilBody(b, l + 1); r = r && consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // TILDE INTERPOLATING_SIGIL_NAME SIGIL_PROMOTER interpolatedSigilBody SIGIL_TERMINATOR sigilModifiers public static boolean interpolatedSigilLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedSigilLine")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, TILDE, INTERPOLATING_SIGIL_NAME, SIGIL_PROMOTER); r = r && interpolatedSigilBody(b, l + 1); r = r && consumeToken(b, SIGIL_TERMINATOR); r = r && sigilModifiers(b, l + 1); exit_section_(b, m, INTERPOLATED_SIGIL_LINE, r); return r; } /* ********************************************************** */ // (interpolation | STRING_FRAGMENT | sigilEscapeSequence)* public static boolean interpolatedStringBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedStringBody")) return false; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_STRING_BODY, "<interpolated string body>"); int c = current_position_(b); while (true) { if (!interpolatedStringBody_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "interpolatedStringBody", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } // interpolation | STRING_FRAGMENT | sigilEscapeSequence private static boolean interpolatedStringBody_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedStringBody_0")) return false; boolean r; Marker m = enter_section_(b); r = interpolation(b, l + 1); if (!r) r = consumeToken(b, STRING_FRAGMENT); if (!r) r = sigilEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // heredocLinePrefix interpolatedStringBody EOL public static boolean interpolatedStringHeredocLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedStringHeredocLine")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_STRING_HEREDOC_LINE, "<interpolated string heredoc line>"); r = heredocLinePrefix(b, l + 1); r = r && interpolatedStringBody(b, l + 1); r = r && consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // TILDE INTERPOLATING_STRING_SIGIL_NAME STRING_SIGIL_HEREDOC_PROMOTER EOL // interpolatedStringHeredocLine* // heredocPrefix STRING_SIGIL_HEREDOC_TERMINATOR sigilModifiers public static boolean interpolatedStringSigilHeredoc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedStringSigilHeredoc")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_STRING_SIGIL_HEREDOC, null); r = consumeTokens(b, 3, TILDE, INTERPOLATING_STRING_SIGIL_NAME, STRING_SIGIL_HEREDOC_PROMOTER, EOL); p = r; // pin = 3 r = r && report_error_(b, interpolatedStringSigilHeredoc_4(b, l + 1)); r = p && report_error_(b, heredocPrefix(b, l + 1)) && r; r = p && report_error_(b, consumeToken(b, STRING_SIGIL_HEREDOC_TERMINATOR)) && r; r = p && sigilModifiers(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // interpolatedStringHeredocLine* private static boolean interpolatedStringSigilHeredoc_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedStringSigilHeredoc_4")) return false; int c = current_position_(b); while (true) { if (!interpolatedStringHeredocLine(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "interpolatedStringSigilHeredoc_4", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // TILDE INTERPOLATING_STRING_SIGIL_NAME STRING_SIGIL_PROMOTER interpolatedStringBody STRING_SIGIL_TERMINATOR sigilModifiers public static boolean interpolatedStringSigilLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedStringSigilLine")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, TILDE, INTERPOLATING_STRING_SIGIL_NAME, STRING_SIGIL_PROMOTER); r = r && interpolatedStringBody(b, l + 1); r = r && consumeToken(b, STRING_SIGIL_TERMINATOR); r = r && sigilModifiers(b, l + 1); exit_section_(b, m, INTERPOLATED_STRING_SIGIL_LINE, r); return r; } /* ********************************************************** */ // (interpolation | WORDS_FRAGMENT | sigilEscapeSequence)* public static boolean interpolatedWordsBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedWordsBody")) return false; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_WORDS_BODY, "<interpolated words body>"); int c = current_position_(b); while (true) { if (!interpolatedWordsBody_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "interpolatedWordsBody", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } // interpolation | WORDS_FRAGMENT | sigilEscapeSequence private static boolean interpolatedWordsBody_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedWordsBody_0")) return false; boolean r; Marker m = enter_section_(b); r = interpolation(b, l + 1); if (!r) r = consumeToken(b, WORDS_FRAGMENT); if (!r) r = sigilEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // TILDE INTERPOLATING_WORDS_SIGIL_NAME WORDS_HEREDOC_PROMOTER EOL // interpolatedWordsHeredocLine* // heredocPrefix WORDS_HEREDOC_TERMINATOR sigilModifiers public static boolean interpolatedWordsHeredoc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedWordsHeredoc")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_WORDS_HEREDOC, null); r = consumeTokens(b, 3, TILDE, INTERPOLATING_WORDS_SIGIL_NAME, WORDS_HEREDOC_PROMOTER, EOL); p = r; // pin = 3 r = r && report_error_(b, interpolatedWordsHeredoc_4(b, l + 1)); r = p && report_error_(b, heredocPrefix(b, l + 1)) && r; r = p && report_error_(b, consumeToken(b, WORDS_HEREDOC_TERMINATOR)) && r; r = p && sigilModifiers(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // interpolatedWordsHeredocLine* private static boolean interpolatedWordsHeredoc_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedWordsHeredoc_4")) return false; int c = current_position_(b); while (true) { if (!interpolatedWordsHeredocLine(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "interpolatedWordsHeredoc_4", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // heredocLinePrefix interpolatedWordsBody EOL public static boolean interpolatedWordsHeredocLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedWordsHeredocLine")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, INTERPOLATED_WORDS_HEREDOC_LINE, "<interpolated words heredoc line>"); r = heredocLinePrefix(b, l + 1); r = r && interpolatedWordsBody(b, l + 1); r = r && consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // TILDE INTERPOLATING_WORDS_SIGIL_NAME WORDS_PROMOTER interpolatedWordsBody WORDS_TERMINATOR sigilModifiers public static boolean interpolatedWordsLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolatedWordsLine")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, TILDE, INTERPOLATING_WORDS_SIGIL_NAME, WORDS_PROMOTER); r = r && interpolatedWordsBody(b, l + 1); r = r && consumeToken(b, WORDS_TERMINATOR); r = r && sigilModifiers(b, l + 1); exit_section_(b, m, INTERPOLATED_WORDS_LINE, r); return r; } /* ********************************************************** */ // INTERPOLATION_START elixirFile INTERPOLATION_END public static boolean interpolation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "interpolation")) return false; if (!nextTokenIs(b, INTERPOLATION_START)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, INTERPOLATION_START); r = r && elixirFile(b, l + 1); r = r && consumeToken(b, INTERPOLATION_END); exit_section_(b, m, INTERPOLATION, r); return r; } /* ********************************************************** */ // AFTER | // ALIAS_TOKEN | // AND_OPERATOR | // ARROW_OPERATOR | // ASSOCIATION_OPERATOR | // AT_OPERATOR | // BIT_STRING_OPERATOR | // CAPTURE_OPERATOR | // CATCH | // COMPARISON_OPERATOR | // DO | // DUAL_OPERATOR | // ELSE | // IDENTIFIER_TOKEN | // IN_MATCH_OPERATOR | // IN_OPERATOR | // MAP_OPERATOR | // MATCH_OPERATOR | // MULTIPLICATION_OPERATOR | // NIL | // OR_OPERATOR | // PIPE_OPERATOR | // RESCUE | // RELATIONAL_OPERATOR | // STAB_OPERATOR | // STRUCT_OPERATOR | // THREE_OPERATOR | // TUPLE_OPERATOR | // TWO_OPERATOR | // UNARY_OPERATOR | // WHEN_OPERATOR | // quote public static boolean keywordKey(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "keywordKey")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, KEYWORD_KEY, "<keyword key>"); r = consumeToken(b, AFTER); if (!r) r = consumeToken(b, ALIAS_TOKEN); if (!r) r = consumeToken(b, AND_OPERATOR); if (!r) r = consumeToken(b, ARROW_OPERATOR); if (!r) r = consumeToken(b, ASSOCIATION_OPERATOR); if (!r) r = consumeToken(b, AT_OPERATOR); if (!r) r = consumeToken(b, BIT_STRING_OPERATOR); if (!r) r = consumeToken(b, CAPTURE_OPERATOR); if (!r) r = consumeToken(b, CATCH); if (!r) r = consumeToken(b, COMPARISON_OPERATOR); if (!r) r = consumeToken(b, DO); if (!r) r = consumeToken(b, DUAL_OPERATOR); if (!r) r = consumeToken(b, ELSE); if (!r) r = consumeToken(b, IDENTIFIER_TOKEN); if (!r) r = consumeToken(b, IN_MATCH_OPERATOR); if (!r) r = consumeToken(b, IN_OPERATOR); if (!r) r = consumeToken(b, MAP_OPERATOR); if (!r) r = consumeToken(b, MATCH_OPERATOR); if (!r) r = consumeToken(b, MULTIPLICATION_OPERATOR); if (!r) r = consumeToken(b, NIL); if (!r) r = consumeToken(b, OR_OPERATOR); if (!r) r = consumeToken(b, PIPE_OPERATOR); if (!r) r = consumeToken(b, RESCUE); if (!r) r = consumeToken(b, RELATIONAL_OPERATOR); if (!r) r = consumeToken(b, STAB_OPERATOR); if (!r) r = consumeToken(b, STRUCT_OPERATOR); if (!r) r = consumeToken(b, THREE_OPERATOR); if (!r) r = consumeToken(b, TUPLE_OPERATOR); if (!r) r = consumeToken(b, TWO_OPERATOR); if (!r) r = consumeToken(b, UNARY_OPERATOR); if (!r) r = consumeToken(b, WHEN_OPERATOR); if (!r) r = quote(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // keywordKey KEYWORD_PAIR_COLON EOL* static boolean keywordKeyColonEOL(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "keywordKeyColonEOL")) return false; boolean r; Marker m = enter_section_(b); r = keywordKey(b, l + 1); r = r && consumeToken(b, KEYWORD_PAIR_COLON); r = r && keywordKeyColonEOL_2(b, l + 1); exit_section_(b, m, null, r); return r; } // EOL* private static boolean keywordKeyColonEOL_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "keywordKeyColonEOL_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "keywordKeyColonEOL_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // keywordKeyColonEOL containerExpression public static boolean keywordPair(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "keywordPair")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, KEYWORD_PAIR, "<keyword pair>"); r = keywordKeyColonEOL(b, l + 1); r = r && containerExpression(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // keywordPair (infixComma keywordPair)* COMMA? public static boolean keywords(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "keywords")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, KEYWORDS, "<keywords>"); r = keywordPair(b, l + 1); r = r && keywords_1(b, l + 1); r = r && keywords_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // (infixComma keywordPair)* private static boolean keywords_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "keywords_1")) return false; int c = current_position_(b); while (true) { if (!keywords_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "keywords_1", c)) break; c = current_position_(b); } return true; } // infixComma keywordPair private static boolean keywords_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "keywords_1_0")) return false; boolean r; Marker m = enter_section_(b); r = infixComma(b, l + 1); r = r && keywordPair(b, l + 1); exit_section_(b, m, null, r); return r; } // COMMA? private static boolean keywords_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "keywords_2")) return false; consumeToken(b, COMMA); return true; } /* ********************************************************** */ // OPENING_BRACKET EOL* // listArguments? EOL* // CLOSING_BRACKET public static boolean list(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "list")) return false; if (!nextTokenIs(b, OPENING_BRACKET)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, OPENING_BRACKET); r = r && list_1(b, l + 1); r = r && list_2(b, l + 1); r = r && list_3(b, l + 1); r = r && consumeToken(b, CLOSING_BRACKET); exit_section_(b, m, LIST, r); return r; } // EOL* private static boolean list_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "list_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "list_1", c)) break; c = current_position_(b); } return true; } // listArguments? private static boolean list_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "list_2")) return false; listArguments(b, l + 1); return true; } // EOL* private static boolean list_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "list_3")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "list_3", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // keywords | // containerArguments static boolean listArguments(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "listArguments")) return false; boolean r; Marker m = enter_section_(b); r = keywords(b, l + 1); if (!r) r = containerArguments(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // (CHAR_LIST_FRAGMENT | sigilEscapeSequence)* public static boolean literalCharListBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalCharListBody")) return false; Marker m = enter_section_(b, l, _NONE_, LITERAL_CHAR_LIST_BODY, "<literal char list body>"); int c = current_position_(b); while (true) { if (!literalCharListBody_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "literalCharListBody", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } // CHAR_LIST_FRAGMENT | sigilEscapeSequence private static boolean literalCharListBody_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalCharListBody_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, CHAR_LIST_FRAGMENT); if (!r) r = sigilEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // heredocLinePrefix literalCharListBody EOL public static boolean literalCharListHeredocLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalCharListHeredocLine")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, LITERAL_CHAR_LIST_HEREDOC_LINE, "<literal char list heredoc line>"); r = heredocLinePrefix(b, l + 1); r = r && literalCharListBody(b, l + 1); r = r && consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // TILDE LITERAL_CHAR_LIST_SIGIL_NAME CHAR_LIST_SIGIL_HEREDOC_PROMOTER EOL // literalCharListHeredocLine* // heredocPrefix CHAR_LIST_SIGIL_HEREDOC_TERMINATOR sigilModifiers public static boolean literalCharListSigilHeredoc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalCharListSigilHeredoc")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, LITERAL_CHAR_LIST_SIGIL_HEREDOC, null); r = consumeTokens(b, 3, TILDE, LITERAL_CHAR_LIST_SIGIL_NAME, CHAR_LIST_SIGIL_HEREDOC_PROMOTER, EOL); p = r; // pin = 3 r = r && report_error_(b, literalCharListSigilHeredoc_4(b, l + 1)); r = p && report_error_(b, heredocPrefix(b, l + 1)) && r; r = p && report_error_(b, consumeToken(b, CHAR_LIST_SIGIL_HEREDOC_TERMINATOR)) && r; r = p && sigilModifiers(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // literalCharListHeredocLine* private static boolean literalCharListSigilHeredoc_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalCharListSigilHeredoc_4")) return false; int c = current_position_(b); while (true) { if (!literalCharListHeredocLine(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "literalCharListSigilHeredoc_4", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // TILDE LITERAL_CHAR_LIST_SIGIL_NAME CHAR_LIST_SIGIL_PROMOTER literalCharListBody CHAR_LIST_SIGIL_TERMINATOR sigilModifiers public static boolean literalCharListSigilLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalCharListSigilLine")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, TILDE, LITERAL_CHAR_LIST_SIGIL_NAME, CHAR_LIST_SIGIL_PROMOTER); r = r && literalCharListBody(b, l + 1); r = r && consumeToken(b, CHAR_LIST_SIGIL_TERMINATOR); r = r && sigilModifiers(b, l + 1); exit_section_(b, m, LITERAL_CHAR_LIST_SIGIL_LINE, r); return r; } /* ********************************************************** */ // (REGEX_FRAGMENT | sigilEscapeSequence)* public static boolean literalRegexBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalRegexBody")) return false; Marker m = enter_section_(b, l, _NONE_, LITERAL_REGEX_BODY, "<literal regex body>"); int c = current_position_(b); while (true) { if (!literalRegexBody_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "literalRegexBody", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } // REGEX_FRAGMENT | sigilEscapeSequence private static boolean literalRegexBody_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalRegexBody_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, REGEX_FRAGMENT); if (!r) r = sigilEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // TILDE LITERAL_REGEX_SIGIL_NAME REGEX_HEREDOC_PROMOTER EOL // literalRegexHeredocLine* // heredocPrefix REGEX_HEREDOC_TERMINATOR sigilModifiers public static boolean literalRegexHeredoc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalRegexHeredoc")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, LITERAL_REGEX_HEREDOC, null); r = consumeTokens(b, 3, TILDE, LITERAL_REGEX_SIGIL_NAME, REGEX_HEREDOC_PROMOTER, EOL); p = r; // pin = 3 r = r && report_error_(b, literalRegexHeredoc_4(b, l + 1)); r = p && report_error_(b, heredocPrefix(b, l + 1)) && r; r = p && report_error_(b, consumeToken(b, REGEX_HEREDOC_TERMINATOR)) && r; r = p && sigilModifiers(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // literalRegexHeredocLine* private static boolean literalRegexHeredoc_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalRegexHeredoc_4")) return false; int c = current_position_(b); while (true) { if (!literalRegexHeredocLine(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "literalRegexHeredoc_4", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // heredocLinePrefix literalRegexBody EOL public static boolean literalRegexHeredocLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalRegexHeredocLine")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, LITERAL_REGEX_HEREDOC_LINE, "<literal regex heredoc line>"); r = heredocLinePrefix(b, l + 1); r = r && literalRegexBody(b, l + 1); r = r && consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // TILDE LITERAL_REGEX_SIGIL_NAME REGEX_PROMOTER literalRegexBody REGEX_TERMINATOR sigilModifiers public static boolean literalRegexLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalRegexLine")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, TILDE, LITERAL_REGEX_SIGIL_NAME, REGEX_PROMOTER); r = r && literalRegexBody(b, l + 1); r = r && consumeToken(b, REGEX_TERMINATOR); r = r && sigilModifiers(b, l + 1); exit_section_(b, m, LITERAL_REGEX_LINE, r); return r; } /* ********************************************************** */ // (SIGIL_FRAGMENT | sigilEscapeSequence)* public static boolean literalSigilBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalSigilBody")) return false; Marker m = enter_section_(b, l, _NONE_, LITERAL_SIGIL_BODY, "<literal sigil body>"); int c = current_position_(b); while (true) { if (!literalSigilBody_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "literalSigilBody", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } // SIGIL_FRAGMENT | sigilEscapeSequence private static boolean literalSigilBody_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalSigilBody_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, SIGIL_FRAGMENT); if (!r) r = sigilEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // TILDE LITERAL_SIGIL_NAME SIGIL_HEREDOC_PROMOTER EOL // literalSigilHeredocLine* // heredocPrefix SIGIL_HEREDOC_TERMINATOR sigilModifiers public static boolean literalSigilHeredoc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalSigilHeredoc")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, LITERAL_SIGIL_HEREDOC, null); r = consumeTokens(b, 3, TILDE, LITERAL_SIGIL_NAME, SIGIL_HEREDOC_PROMOTER, EOL); p = r; // pin = 3 r = r && report_error_(b, literalSigilHeredoc_4(b, l + 1)); r = p && report_error_(b, heredocPrefix(b, l + 1)) && r; r = p && report_error_(b, consumeToken(b, SIGIL_HEREDOC_TERMINATOR)) && r; r = p && sigilModifiers(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // literalSigilHeredocLine* private static boolean literalSigilHeredoc_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalSigilHeredoc_4")) return false; int c = current_position_(b); while (true) { if (!literalSigilHeredocLine(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "literalSigilHeredoc_4", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // heredocLinePrefix literalSigilBody EOL public static boolean literalSigilHeredocLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalSigilHeredocLine")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, LITERAL_SIGIL_HEREDOC_LINE, "<literal sigil heredoc line>"); r = heredocLinePrefix(b, l + 1); r = r && literalSigilBody(b, l + 1); r = r && consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // TILDE LITERAL_SIGIL_NAME SIGIL_PROMOTER literalSigilBody SIGIL_TERMINATOR sigilModifiers public static boolean literalSigilLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalSigilLine")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, TILDE, LITERAL_SIGIL_NAME, SIGIL_PROMOTER); r = r && literalSigilBody(b, l + 1); r = r && consumeToken(b, SIGIL_TERMINATOR); r = r && sigilModifiers(b, l + 1); exit_section_(b, m, LITERAL_SIGIL_LINE, r); return r; } /* ********************************************************** */ // (STRING_FRAGMENT | sigilEscapeSequence)* public static boolean literalStringBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalStringBody")) return false; Marker m = enter_section_(b, l, _NONE_, LITERAL_STRING_BODY, "<literal string body>"); int c = current_position_(b); while (true) { if (!literalStringBody_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "literalStringBody", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } // STRING_FRAGMENT | sigilEscapeSequence private static boolean literalStringBody_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalStringBody_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, STRING_FRAGMENT); if (!r) r = sigilEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // heredocLinePrefix literalStringBody EOL public static boolean literalStringHeredocLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalStringHeredocLine")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, LITERAL_STRING_HEREDOC_LINE, "<literal string heredoc line>"); r = heredocLinePrefix(b, l + 1); r = r && literalStringBody(b, l + 1); r = r && consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // TILDE LITERAL_STRING_SIGIL_NAME STRING_SIGIL_HEREDOC_PROMOTER EOL // literalStringHeredocLine* // heredocPrefix STRING_SIGIL_HEREDOC_TERMINATOR sigilModifiers public static boolean literalStringSigilHeredoc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalStringSigilHeredoc")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, LITERAL_STRING_SIGIL_HEREDOC, null); r = consumeTokens(b, 3, TILDE, LITERAL_STRING_SIGIL_NAME, STRING_SIGIL_HEREDOC_PROMOTER, EOL); p = r; // pin = 3 r = r && report_error_(b, literalStringSigilHeredoc_4(b, l + 1)); r = p && report_error_(b, heredocPrefix(b, l + 1)) && r; r = p && report_error_(b, consumeToken(b, STRING_SIGIL_HEREDOC_TERMINATOR)) && r; r = p && sigilModifiers(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // literalStringHeredocLine* private static boolean literalStringSigilHeredoc_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalStringSigilHeredoc_4")) return false; int c = current_position_(b); while (true) { if (!literalStringHeredocLine(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "literalStringSigilHeredoc_4", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // TILDE LITERAL_STRING_SIGIL_NAME STRING_SIGIL_PROMOTER literalStringBody STRING_SIGIL_TERMINATOR sigilModifiers public static boolean literalStringSigilLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalStringSigilLine")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, TILDE, LITERAL_STRING_SIGIL_NAME, STRING_SIGIL_PROMOTER); r = r && literalStringBody(b, l + 1); r = r && consumeToken(b, STRING_SIGIL_TERMINATOR); r = r && sigilModifiers(b, l + 1); exit_section_(b, m, LITERAL_STRING_SIGIL_LINE, r); return r; } /* ********************************************************** */ // (WORDS_FRAGMENT | sigilEscapeSequence)* public static boolean literalWordsBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalWordsBody")) return false; Marker m = enter_section_(b, l, _NONE_, LITERAL_WORDS_BODY, "<literal words body>"); int c = current_position_(b); while (true) { if (!literalWordsBody_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "literalWordsBody", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } // WORDS_FRAGMENT | sigilEscapeSequence private static boolean literalWordsBody_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalWordsBody_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, WORDS_FRAGMENT); if (!r) r = sigilEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // TILDE LITERAL_WORDS_SIGIL_NAME WORDS_HEREDOC_PROMOTER EOL // literalWordsHeredocLine* // heredocPrefix WORDS_HEREDOC_TERMINATOR sigilModifiers public static boolean literalWordsHeredoc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalWordsHeredoc")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, LITERAL_WORDS_HEREDOC, null); r = consumeTokens(b, 3, TILDE, LITERAL_WORDS_SIGIL_NAME, WORDS_HEREDOC_PROMOTER, EOL); p = r; // pin = 3 r = r && report_error_(b, literalWordsHeredoc_4(b, l + 1)); r = p && report_error_(b, heredocPrefix(b, l + 1)) && r; r = p && report_error_(b, consumeToken(b, WORDS_HEREDOC_TERMINATOR)) && r; r = p && sigilModifiers(b, l + 1) && r; exit_section_(b, l, m, r, p, null); return r || p; } // literalWordsHeredocLine* private static boolean literalWordsHeredoc_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalWordsHeredoc_4")) return false; int c = current_position_(b); while (true) { if (!literalWordsHeredocLine(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "literalWordsHeredoc_4", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // heredocLinePrefix literalWordsBody EOL public static boolean literalWordsHeredocLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalWordsHeredocLine")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, LITERAL_WORDS_HEREDOC_LINE, "<literal words heredoc line>"); r = heredocLinePrefix(b, l + 1); r = r && literalWordsBody(b, l + 1); r = r && consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // TILDE LITERAL_WORDS_SIGIL_NAME WORDS_PROMOTER literalWordsBody WORDS_TERMINATOR sigilModifiers public static boolean literalWordsLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "literalWordsLine")) return false; if (!nextTokenIs(b, TILDE)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, TILDE, LITERAL_WORDS_SIGIL_NAME, WORDS_PROMOTER); r = r && literalWordsBody(b, l + 1); r = r && consumeToken(b, WORDS_TERMINATOR); r = r && sigilModifiers(b, l + 1); exit_section_(b, m, LITERAL_WORDS_LINE, r); return r; } /* ********************************************************** */ // mapOperation | // structOperation static boolean map(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "map")) return false; if (!nextTokenIs(b, STRUCT_OPERATOR)) return false; boolean r; Marker m = enter_section_(b); r = mapOperation(b, l + 1); if (!r) r = structOperation(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // OPENING_CURLY EOL* // ( // // Must be before mapConstructionArguments, so that PIPE_OPERATOR is used for updates and not matchedExpression. // mapUpdateArguments | // mapConstructionArguments // )? EOL* // CLOSING_CURLY public static boolean mapArguments(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapArguments")) return false; if (!nextTokenIs(b, OPENING_CURLY)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, OPENING_CURLY); r = r && mapArguments_1(b, l + 1); r = r && mapArguments_2(b, l + 1); r = r && mapArguments_3(b, l + 1); r = r && consumeToken(b, CLOSING_CURLY); exit_section_(b, m, MAP_ARGUMENTS, r); return r; } // EOL* private static boolean mapArguments_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapArguments_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "mapArguments_1", c)) break; c = current_position_(b); } return true; } // ( // // Must be before mapConstructionArguments, so that PIPE_OPERATOR is used for updates and not matchedExpression. // mapUpdateArguments | // mapConstructionArguments // )? private static boolean mapArguments_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapArguments_2")) return false; mapArguments_2_0(b, l + 1); return true; } // mapUpdateArguments | // mapConstructionArguments private static boolean mapArguments_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapArguments_2_0")) return false; boolean r; Marker m = enter_section_(b); r = mapUpdateArguments(b, l + 1); if (!r) r = mapConstructionArguments(b, l + 1); exit_section_(b, m, null, r); return r; } // EOL* private static boolean mapArguments_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapArguments_3")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "mapArguments_3", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // mapTailArguments public static boolean mapConstructionArguments(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapConstructionArguments")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, MAP_CONSTRUCTION_ARGUMENTS, "<map construction arguments>"); r = mapTailArguments(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // maxExpression | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L498-L499 // atMaxExpression static boolean mapExpression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapExpression")) return false; boolean r; Marker m = enter_section_(b); r = maxExpression(b, l + 1); if (!r) r = atMaxExpression(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // mapPrefixOperator mapArguments public static boolean mapOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapOperation")) return false; if (!nextTokenIs(b, STRUCT_OPERATOR)) return false; boolean r; Marker m = enter_section_(b); r = mapPrefixOperator(b, l + 1); r = r && mapArguments(b, l + 1); exit_section_(b, m, MAP_OPERATION, r); return r; } /* ********************************************************** */ // STRUCT_OPERATOR EOL* public static boolean mapPrefixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapPrefixOperator")) return false; if (!nextTokenIs(b, STRUCT_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, MAP_PREFIX_OPERATOR, "<%>"); r = consumeToken(b, STRUCT_OPERATOR); r = r && mapPrefixOperator_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean mapPrefixOperator_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapPrefixOperator_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "mapPrefixOperator_1", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // keywords | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L524 // associationsBase infixComma keywords | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L526 // associations static boolean mapTailArguments(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapTailArguments")) return false; boolean r; Marker m = enter_section_(b); r = keywords(b, l + 1); if (!r) r = mapTailArguments_1(b, l + 1); if (!r) r = associations(b, l + 1); exit_section_(b, m, null, r); return r; } // associationsBase infixComma keywords private static boolean mapTailArguments_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapTailArguments_1")) return false; boolean r; Marker m = enter_section_(b); r = associationsBase(b, l + 1); r = r && infixComma(b, l + 1); r = r && keywords(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // matchedMatchOperation pipeInfixOperator mapTailArguments public static boolean mapUpdateArguments(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "mapUpdateArguments")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, MAP_UPDATE_ARGUMENTS, "<map update arguments>"); r = matchedExpression(b, l + 1, 5); r = r && pipeInfixOperator(b, l + 1); r = r && mapTailArguments(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // EOL* MATCH_OPERATOR EOL* public static boolean matchInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchInfixOperator")) return false; if (!nextTokenIs(b, "<=>", EOL, MATCH_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, MATCH_INFIX_OPERATOR, "<=>"); r = matchInfixOperator_0(b, l + 1); r = r && consumeToken(b, MATCH_OPERATOR); r = r && matchInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean matchInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "matchInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean matchInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "matchInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // CALL parenthesesArguments parenthesesArguments? public static boolean matchedParenthesesArguments(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedParenthesesArguments")) return false; if (!nextTokenIs(b, CALL)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, CALL); r = r && parenthesesArguments(b, l + 1); r = r && matchedParenthesesArguments_2(b, l + 1); exit_section_(b, m, MATCHED_PARENTHESES_ARGUMENTS, r); return r; } // parenthesesArguments? private static boolean matchedParenthesesArguments_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedParenthesesArguments_2")) return false; parenthesesArguments(b, l + 1); return true; } /* ********************************************************** */ // dotInfixOperator parenthesesArguments parenthesesArguments? public static boolean maxDotCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxDotCall")) return false; if (!nextTokenIs(b, "<max dot call>", DOT_OPERATOR, EOL)) return false; boolean r; Marker m = enter_section_(b, l, _LEFT_, MATCHED_DOT_CALL, "<max dot call>"); r = dotInfixOperator(b, l + 1); r = r && parenthesesArguments(b, l + 1); r = r && maxDotCall_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // parenthesesArguments? private static boolean maxDotCall_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxDotCall_2")) return false; parenthesesArguments(b, l + 1); return true; } /* ********************************************************** */ // matchedBracketOperation maxDotCall | // /* matchedQualifiedBracketOperation because it is in the Pratt-parsing table for // matchedExpression will match matchedQualifiedBracketOperation or anything after it in // matchedExpression. matchedQualifiedBracketOperation is used because it is the next rule // after matchedQualifiedAliasOperation. maxQualifiedAlias needs to be `left` and `+` to // emulate the POSTFIX behavior for matchedQualifiedAliasOperation. // matchedQualifiedAliasOperation cannot be used because the Pratt-parsing table will allow // matchedQualifiedAliasOperation to match it or any lower rule. */ // matchedQualifiedBracketOperation maxQualifiedAlias+ | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L231 // /* matchedQualifiedNoArgumentsCall because it is first rule after // matchedQualifiedParenthesesCall */ // matchedQualifiedNoArgumentsCall maxQualifiedParenthesesCall | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L231 // /* matchedAtUnqualifiedBracketOperation and all rules thrugh accessExpression are necessary // because all those rules are ATOM or PREFIX so they won't also match lower rules */ // ( // matchedAtUnqualifiedBracketOperation | // matchedAtNonNumericOperation | // matchedUnqualifiedParenthesesCall | // matchedUnqualifiedBracketOperation | // variable | // accessExpression // ) maxQualifiedNoArgumentsCall | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L499 // matchedUnqualifiedParenthesesCall | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L231 // variable | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L499 // atom | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L226-L228 // alias static boolean maxExpression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxExpression")) return false; boolean r; Marker m = enter_section_(b); r = maxExpression_0(b, l + 1); if (!r) r = maxExpression_1(b, l + 1); if (!r) r = maxExpression_2(b, l + 1); if (!r) r = maxExpression_3(b, l + 1); if (!r) r = matchedUnqualifiedParenthesesCall(b, l + 1); if (!r) r = variable(b, l + 1); if (!r) r = atom(b, l + 1); if (!r) r = alias(b, l + 1); exit_section_(b, m, null, r); return r; } // matchedBracketOperation maxDotCall private static boolean maxExpression_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxExpression_0")) return false; boolean r; Marker m = enter_section_(b); r = matchedExpression(b, l + 1, 21); r = r && maxDotCall(b, l + 1); exit_section_(b, m, null, r); return r; } // matchedQualifiedBracketOperation maxQualifiedAlias+ private static boolean maxExpression_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxExpression_1")) return false; boolean r; Marker m = enter_section_(b); r = matchedExpression(b, l + 1, 24); r = r && maxExpression_1_1(b, l + 1); exit_section_(b, m, null, r); return r; } // maxQualifiedAlias+ private static boolean maxExpression_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxExpression_1_1")) return false; boolean r; Marker m = enter_section_(b); r = maxQualifiedAlias(b, l + 1); int c = current_position_(b); while (r) { if (!maxQualifiedAlias(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "maxExpression_1_1", c)) break; c = current_position_(b); } exit_section_(b, m, null, r); return r; } // matchedQualifiedNoArgumentsCall maxQualifiedParenthesesCall private static boolean maxExpression_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxExpression_2")) return false; boolean r; Marker m = enter_section_(b); r = matchedExpression(b, l + 1, 26); r = r && maxQualifiedParenthesesCall(b, l + 1); exit_section_(b, m, null, r); return r; } // ( // matchedAtUnqualifiedBracketOperation | // matchedAtNonNumericOperation | // matchedUnqualifiedParenthesesCall | // matchedUnqualifiedBracketOperation | // variable | // accessExpression // ) maxQualifiedNoArgumentsCall private static boolean maxExpression_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxExpression_3")) return false; boolean r; Marker m = enter_section_(b); r = maxExpression_3_0(b, l + 1); r = r && maxQualifiedNoArgumentsCall(b, l + 1); exit_section_(b, m, null, r); return r; } // matchedAtUnqualifiedBracketOperation | // matchedAtNonNumericOperation | // matchedUnqualifiedParenthesesCall | // matchedUnqualifiedBracketOperation | // variable | // accessExpression private static boolean maxExpression_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxExpression_3_0")) return false; boolean r; Marker m = enter_section_(b); r = matchedAtUnqualifiedBracketOperation(b, l + 1); if (!r) r = matchedAtNonNumericOperation(b, l + 1); if (!r) r = matchedUnqualifiedParenthesesCall(b, l + 1); if (!r) r = matchedUnqualifiedBracketOperation(b, l + 1); if (!r) r = variable(b, l + 1); if (!r) r = accessExpression(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // dotInfixOperator alias public static boolean maxQualifiedAlias(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxQualifiedAlias")) return false; if (!nextTokenIs(b, "<max qualified alias>", DOT_OPERATOR, EOL)) return false; boolean r; Marker m = enter_section_(b, l, _LEFT_, MATCHED_QUALIFIED_ALIAS, "<max qualified alias>"); r = dotInfixOperator(b, l + 1); r = r && alias(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // dotInfixOperator relativeIdentifier !CALL public static boolean maxQualifiedNoArgumentsCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxQualifiedNoArgumentsCall")) return false; if (!nextTokenIs(b, "<max qualified no arguments call>", DOT_OPERATOR, EOL)) return false; boolean r; Marker m = enter_section_(b, l, _LEFT_, MATCHED_QUALIFIED_NO_ARGUMENTS_CALL, "<max qualified no arguments call>"); r = dotInfixOperator(b, l + 1); r = r && relativeIdentifier(b, l + 1); r = r && maxQualifiedNoArgumentsCall_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // !CALL private static boolean maxQualifiedNoArgumentsCall_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxQualifiedNoArgumentsCall_2")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeToken(b, CALL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // dotInfixOperator relativeIdentifier matchedParenthesesArguments public static boolean maxQualifiedParenthesesCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "maxQualifiedParenthesesCall")) return false; if (!nextTokenIs(b, "<max qualified parentheses call>", DOT_OPERATOR, EOL)) return false; boolean r; Marker m = enter_section_(b, l, _LEFT_, MATCHED_QUALIFIED_PARENTHESES_CALL, "<max qualified parentheses call>"); r = dotInfixOperator(b, l + 1); r = r && relativeIdentifier(b, l + 1); r = r && matchedParenthesesArguments(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // OPENING_CURLY EOL* // containerArguments? EOL* // CLOSING_CURLY public static boolean multipleAliases(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "multipleAliases")) return false; if (!nextTokenIs(b, OPENING_CURLY)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, OPENING_CURLY); r = r && multipleAliases_1(b, l + 1); r = r && multipleAliases_2(b, l + 1); r = r && multipleAliases_3(b, l + 1); r = r && consumeToken(b, CLOSING_CURLY); exit_section_(b, m, MULTIPLE_ALIASES, r); return r; } // EOL* private static boolean multipleAliases_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "multipleAliases_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "multipleAliases_1", c)) break; c = current_position_(b); } return true; } // containerArguments? private static boolean multipleAliases_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "multipleAliases_2")) return false; containerArguments(b, l + 1); return true; } // EOL* private static boolean multipleAliases_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "multipleAliases_3")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "multipleAliases_3", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // EOL* MULTIPLICATION_OPERATOR EOL* public static boolean multiplicationInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "multiplicationInfixOperator")) return false; if (!nextTokenIs(b, "<*, />", EOL, MULTIPLICATION_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, MULTIPLICATION_INFIX_OPERATOR, "<*, />"); r = multiplicationInfixOperator_0(b, l + 1); r = r && consumeToken(b, MULTIPLICATION_OPERATOR); r = r && multiplicationInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean multiplicationInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "multiplicationInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "multiplicationInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean multiplicationInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "multiplicationInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "multiplicationInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // noParenthesesOneArgument | // noParenthesesManyArguments public static boolean noParenthesesArguments(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesArguments")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, NO_PARENTHESES_ARGUMENTS, "<no parentheses arguments>"); r = noParenthesesOneArgument(b, l + 1); if (!r) r = noParenthesesManyArguments(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // emptyParentheses | // /* Must be before matchedExpression because noParenthesesExpression is // `matchedExpressionDotIdentifier callArgumentsNoParenthesesManyStrict` which is // longer than `matchedExpressionDotIdentifier` in matchedExpression. */ // /* This will be marked as an error by // {@link org.elixir_lang.inspection.NoParenthesesManyStrict} */ // noParenthesesManyStrictNoParenthesesExpression | // matchedExpression static boolean noParenthesesExpression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesExpression")) return false; boolean r; Marker m = enter_section_(b); r = emptyParentheses(b, l + 1); if (!r) r = noParenthesesManyStrictNoParenthesesExpression(b, l + 1); if (!r) r = matchedExpression(b, l + 1, -1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // keywordKeyColonEOL noParenthesesExpression public static boolean noParenthesesKeywordPair(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesKeywordPair")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, NO_PARENTHESES_KEYWORD_PAIR, "<no parentheses keyword pair>"); r = keywordKeyColonEOL(b, l + 1); r = r && noParenthesesExpression(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // noParenthesesKeywordPair (infixComma noParenthesesKeywordPair)* public static boolean noParenthesesKeywords(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesKeywords")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, NO_PARENTHESES_KEYWORDS, "<no parentheses keywords>"); r = noParenthesesKeywordPair(b, l + 1); r = r && noParenthesesKeywords_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // (infixComma noParenthesesKeywordPair)* private static boolean noParenthesesKeywords_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesKeywords_1")) return false; int c = current_position_(b); while (true) { if (!noParenthesesKeywords_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "noParenthesesKeywords_1", c)) break; c = current_position_(b); } return true; } // infixComma noParenthesesKeywordPair private static boolean noParenthesesKeywords_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesKeywords_1_0")) return false; boolean r; Marker m = enter_section_(b); r = infixComma(b, l + 1); r = r && noParenthesesKeywordPair(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // matchedExpression infixComma noParenthesesKeywords | // !additionTail matchedExpression (infixComma noParenthesesExpression)+ (infixComma noParenthesesKeywords)? static boolean noParenthesesManyArguments(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesManyArguments")) return false; boolean r; Marker m = enter_section_(b); r = noParenthesesManyArguments_0(b, l + 1); if (!r) r = noParenthesesManyArguments_1(b, l + 1); exit_section_(b, m, null, r); return r; } // matchedExpression infixComma noParenthesesKeywords private static boolean noParenthesesManyArguments_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesManyArguments_0")) return false; boolean r; Marker m = enter_section_(b); r = matchedExpression(b, l + 1, -1); r = r && infixComma(b, l + 1); r = r && noParenthesesKeywords(b, l + 1); exit_section_(b, m, null, r); return r; } // !additionTail matchedExpression (infixComma noParenthesesExpression)+ (infixComma noParenthesesKeywords)? private static boolean noParenthesesManyArguments_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesManyArguments_1")) return false; boolean r; Marker m = enter_section_(b); r = noParenthesesManyArguments_1_0(b, l + 1); r = r && matchedExpression(b, l + 1, -1); r = r && noParenthesesManyArguments_1_2(b, l + 1); r = r && noParenthesesManyArguments_1_3(b, l + 1); exit_section_(b, m, null, r); return r; } // !additionTail private static boolean noParenthesesManyArguments_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesManyArguments_1_0")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !additionTail(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // (infixComma noParenthesesExpression)+ private static boolean noParenthesesManyArguments_1_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesManyArguments_1_2")) return false; boolean r; Marker m = enter_section_(b); r = noParenthesesManyArguments_1_2_0(b, l + 1); int c = current_position_(b); while (r) { if (!noParenthesesManyArguments_1_2_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "noParenthesesManyArguments_1_2", c)) break; c = current_position_(b); } exit_section_(b, m, null, r); return r; } // infixComma noParenthesesExpression private static boolean noParenthesesManyArguments_1_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesManyArguments_1_2_0")) return false; boolean r; Marker m = enter_section_(b); r = infixComma(b, l + 1); r = r && noParenthesesExpression(b, l + 1); exit_section_(b, m, null, r); return r; } // (infixComma noParenthesesKeywords)? private static boolean noParenthesesManyArguments_1_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesManyArguments_1_3")) return false; noParenthesesManyArguments_1_3_0(b, l + 1); return true; } // infixComma noParenthesesKeywords private static boolean noParenthesesManyArguments_1_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesManyArguments_1_3_0")) return false; boolean r; Marker m = enter_section_(b); r = infixComma(b, l + 1); r = r && noParenthesesKeywords(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // noParenthesesManyArguments | // noParenthesesStrict static boolean noParenthesesManyArgumentsStrict(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesManyArgumentsStrict")) return false; boolean r; Marker m = enter_section_(b); r = noParenthesesManyArguments(b, l + 1); if (!r) r = noParenthesesStrict(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // unqualifiedNoParenthesesManyArgumentsCall public static boolean noParenthesesManyStrictNoParenthesesExpression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesManyStrictNoParenthesesExpression")) return false; if (!nextTokenIs(b, IDENTIFIER_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = unqualifiedNoParenthesesManyArgumentsCall(b, l + 1); exit_section_(b, m, NO_PARENTHESES_MANY_STRICT_NO_PARENTHESES_EXPRESSION, r); return r; } /* ********************************************************** */ // noParenthesesKeywords | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L417 // unqualifiedNoParenthesesManyArgumentsCall | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L419 // /* This should NOT be in matchedExpression as it's not in matched_expr, but in no_parens_expr, // but having a rule that starts with matchedExpression is only legal in a rule that extends // matchedExpression. // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L124-L125 */ // noParenthesesManyArgumentsStrict | // /* MUST be after noParenthesesManyArgumentsStrict so that matchedExpression's inbuilt error handling doesn't match with error. // NOTE this is used in both unmatchedExpression and matchedExpression. Using // matchedExpression here ensures the `do` block is only consumed by the left-most // unmatchedExpression call and not any of the middle matchedExpression calls. // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L418 // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_tokenizer.erl#L609-L610 */ // !additionTail matchedExpression public static boolean noParenthesesOneArgument(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesOneArgument")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, NO_PARENTHESES_ONE_ARGUMENT, "<no parentheses one argument>"); r = noParenthesesKeywords(b, l + 1); if (!r) r = unqualifiedNoParenthesesManyArgumentsCall(b, l + 1); if (!r) r = noParenthesesManyArgumentsStrict(b, l + 1); if (!r) r = noParenthesesOneArgument_3(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // !additionTail matchedExpression private static boolean noParenthesesOneArgument_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesOneArgument_3")) return false; boolean r; Marker m = enter_section_(b); r = noParenthesesOneArgument_3_0(b, l + 1); r = r && matchedExpression(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // !additionTail private static boolean noParenthesesOneArgument_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesOneArgument_3_0")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !additionTail(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // emptyParentheses | // OPENING_PARENTHESIS ( // noParenthesesKeywords | // noParenthesesManyArguments // ) CLOSING_PARENTHESIS public static boolean noParenthesesStrict(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesStrict")) return false; if (!nextTokenIs(b, OPENING_PARENTHESIS)) return false; boolean r; Marker m = enter_section_(b); r = emptyParentheses(b, l + 1); if (!r) r = noParenthesesStrict_1(b, l + 1); exit_section_(b, m, NO_PARENTHESES_STRICT, r); return r; } // OPENING_PARENTHESIS ( // noParenthesesKeywords | // noParenthesesManyArguments // ) CLOSING_PARENTHESIS private static boolean noParenthesesStrict_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesStrict_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, OPENING_PARENTHESIS); r = r && noParenthesesStrict_1_1(b, l + 1); r = r && consumeToken(b, CLOSING_PARENTHESIS); exit_section_(b, m, null, r); return r; } // noParenthesesKeywords | // noParenthesesManyArguments private static boolean noParenthesesStrict_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "noParenthesesStrict_1_1")) return false; boolean r; Marker m = enter_section_(b); r = noParenthesesKeywords(b, l + 1); if (!r) r = noParenthesesManyArguments(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // charToken | // binaryWholeNumber | // // decimalFloat starts with decimalWholeNumber, so decimalFloat needs to be first // decimalFloat | // decimalWholeNumber | // hexadecimalWholeNumber | // octalWholeNumber | // unknownBaseWholeNumber static boolean numeric(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "numeric")) return false; boolean r; Marker m = enter_section_(b); r = charToken(b, l + 1); if (!r) r = binaryWholeNumber(b, l + 1); if (!r) r = decimalFloat(b, l + 1); if (!r) r = decimalWholeNumber(b, l + 1); if (!r) r = hexadecimalWholeNumber(b, l + 1); if (!r) r = octalWholeNumber(b, l + 1); if (!r) r = unknownBaseWholeNumber(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // INVALID_OCTAL_DIGITS | VALID_OCTAL_DIGITS public static boolean octalDigits(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "octalDigits")) return false; if (!nextTokenIs(b, "<octal digits>", INVALID_OCTAL_DIGITS, VALID_OCTAL_DIGITS)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, OCTAL_DIGITS, "<octal digits>"); r = consumeToken(b, INVALID_OCTAL_DIGITS); if (!r) r = consumeToken(b, VALID_OCTAL_DIGITS); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // BASE_WHOLE_NUMBER_PREFIX OCTAL_WHOLE_NUMBER_BASE octalDigits+ public static boolean octalWholeNumber(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "octalWholeNumber")) return false; if (!nextTokenIs(b, BASE_WHOLE_NUMBER_PREFIX)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, OCTAL_WHOLE_NUMBER, null); r = consumeTokens(b, 2, BASE_WHOLE_NUMBER_PREFIX, OCTAL_WHOLE_NUMBER_BASE); p = r; // pin = 2 r = r && octalWholeNumber_2(b, l + 1); exit_section_(b, l, m, r, p, null); return r || p; } // octalDigits+ private static boolean octalWholeNumber_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "octalWholeNumber_2")) return false; boolean r; Marker m = enter_section_(b); r = octalDigits(b, l + 1); int c = current_position_(b); while (r) { if (!octalDigits(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "octalWholeNumber_2", c)) break; c = current_position_(b); } exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // VALID_HEXADECIMAL_DIGITS public static boolean openHexadecimalEscapeSequence(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "openHexadecimalEscapeSequence")) return false; if (!nextTokenIs(b, VALID_HEXADECIMAL_DIGITS)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, VALID_HEXADECIMAL_DIGITS); exit_section_(b, m, OPEN_HEXADECIMAL_ESCAPE_SEQUENCE, r); return r; } /* ********************************************************** */ // EOL* OR_OPERATOR EOL* public static boolean orInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "orInfixOperator")) return false; if (!nextTokenIs(b, "<||, |||, or>", EOL, OR_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, OR_INFIX_OPERATOR, "<||, |||, or>"); r = orInfixOperator_0(b, l + 1); r = r && consumeToken(b, OR_OPERATOR); r = r && orInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean orInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "orInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "orInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean orInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "orInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "orInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // OPENING_PARENTHESIS EOL* // ( // unqualifiedNoParenthesesManyArgumentsCall | // @see https://github.com/elixir-lang/elixir/blob/39b6789a8625071e149f0a7347ca7a2111f7c8f2/lib/elixir/src/elixir_parser.yrl#L485 // keywords | // @see https://github.com/elixir-lang/elixir/blob/39b6789a8625071e149f0a7347ca7a2111f7c8f2/lib/elixir/src/elixir_parser.yrl#L486 // parenthesesPositionalArguments (infixComma keywords)?)? EOL* // @see https://github.com/elixir-lang/elixir/blob/39b6789a8625071e149f0a7347ca7a2111f7c8f2/lib/elixir/src/elixir_parser.yrl#L487-L488 // CLOSING_PARENTHESIS public static boolean parenthesesArguments(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parenthesesArguments")) return false; if (!nextTokenIs(b, OPENING_PARENTHESIS)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, OPENING_PARENTHESIS); r = r && parenthesesArguments_1(b, l + 1); r = r && parenthesesArguments_2(b, l + 1); r = r && parenthesesArguments_3(b, l + 1); r = r && consumeToken(b, CLOSING_PARENTHESIS); exit_section_(b, m, PARENTHESES_ARGUMENTS, r); return r; } // EOL* private static boolean parenthesesArguments_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parenthesesArguments_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "parenthesesArguments_1", c)) break; c = current_position_(b); } return true; } // ( // unqualifiedNoParenthesesManyArgumentsCall | // @see https://github.com/elixir-lang/elixir/blob/39b6789a8625071e149f0a7347ca7a2111f7c8f2/lib/elixir/src/elixir_parser.yrl#L485 // keywords | // @see https://github.com/elixir-lang/elixir/blob/39b6789a8625071e149f0a7347ca7a2111f7c8f2/lib/elixir/src/elixir_parser.yrl#L486 // parenthesesPositionalArguments (infixComma keywords)?)? private static boolean parenthesesArguments_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parenthesesArguments_2")) return false; parenthesesArguments_2_0(b, l + 1); return true; } // unqualifiedNoParenthesesManyArgumentsCall | // @see https://github.com/elixir-lang/elixir/blob/39b6789a8625071e149f0a7347ca7a2111f7c8f2/lib/elixir/src/elixir_parser.yrl#L485 // keywords | // @see https://github.com/elixir-lang/elixir/blob/39b6789a8625071e149f0a7347ca7a2111f7c8f2/lib/elixir/src/elixir_parser.yrl#L486 // parenthesesPositionalArguments (infixComma keywords)? private static boolean parenthesesArguments_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parenthesesArguments_2_0")) return false; boolean r; Marker m = enter_section_(b); r = unqualifiedNoParenthesesManyArgumentsCall(b, l + 1); if (!r) r = keywords(b, l + 1); if (!r) r = parenthesesArguments_2_0_2(b, l + 1); exit_section_(b, m, null, r); return r; } // parenthesesPositionalArguments (infixComma keywords)? private static boolean parenthesesArguments_2_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parenthesesArguments_2_0_2")) return false; boolean r; Marker m = enter_section_(b); r = parenthesesPositionalArguments(b, l + 1); r = r && parenthesesArguments_2_0_2_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (infixComma keywords)? private static boolean parenthesesArguments_2_0_2_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parenthesesArguments_2_0_2_1")) return false; parenthesesArguments_2_0_2_1_0(b, l + 1); return true; } // infixComma keywords private static boolean parenthesesArguments_2_0_2_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parenthesesArguments_2_0_2_1_0")) return false; boolean r; Marker m = enter_section_(b); r = infixComma(b, l + 1); r = r && keywords(b, l + 1); exit_section_(b, m, null, r); return r; } // EOL* private static boolean parenthesesArguments_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parenthesesArguments_3")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "parenthesesArguments_3", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // containerArgumentsBase static boolean parenthesesPositionalArguments(PsiBuilder b, int l) { return containerArgumentsBase(b, l + 1); } /* ********************************************************** */ // OPENING_PARENTHESIS EOL* // (infixSemicolon? stab infixSemicolon? | infixSemicolon) // EOL* CLOSING_PARENTHESIS public static boolean parentheticalStab(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parentheticalStab")) return false; if (!nextTokenIs(b, OPENING_PARENTHESIS)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, OPENING_PARENTHESIS); r = r && parentheticalStab_1(b, l + 1); r = r && parentheticalStab_2(b, l + 1); r = r && parentheticalStab_3(b, l + 1); r = r && consumeToken(b, CLOSING_PARENTHESIS); exit_section_(b, m, PARENTHETICAL_STAB, r); return r; } // EOL* private static boolean parentheticalStab_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parentheticalStab_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "parentheticalStab_1", c)) break; c = current_position_(b); } return true; } // infixSemicolon? stab infixSemicolon? | infixSemicolon private static boolean parentheticalStab_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parentheticalStab_2")) return false; boolean r; Marker m = enter_section_(b); r = parentheticalStab_2_0(b, l + 1); if (!r) r = infixSemicolon(b, l + 1); exit_section_(b, m, null, r); return r; } // infixSemicolon? stab infixSemicolon? private static boolean parentheticalStab_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parentheticalStab_2_0")) return false; boolean r; Marker m = enter_section_(b); r = parentheticalStab_2_0_0(b, l + 1); r = r && stab(b, l + 1); r = r && parentheticalStab_2_0_2(b, l + 1); exit_section_(b, m, null, r); return r; } // infixSemicolon? private static boolean parentheticalStab_2_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parentheticalStab_2_0_0")) return false; infixSemicolon(b, l + 1); return true; } // infixSemicolon? private static boolean parentheticalStab_2_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parentheticalStab_2_0_2")) return false; infixSemicolon(b, l + 1); return true; } // EOL* private static boolean parentheticalStab_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "parentheticalStab_3")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "parentheticalStab_3", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // EOL* PIPE_OPERATOR EOL* public static boolean pipeInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "pipeInfixOperator")) return false; if (!nextTokenIs(b, "<|>", EOL, PIPE_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, PIPE_INFIX_OPERATOR, "<|>"); r = pipeInfixOperator_0(b, l + 1); r = r && consumeToken(b, PIPE_OPERATOR); r = r && pipeInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean pipeInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "pipeInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "pipeInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean pipeInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "pipeInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "pipeInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // charListLine | stringLine static boolean quote(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "quote")) return false; if (!nextTokenIs(b, "", CHAR_LIST_PROMOTER, STRING_PROMOTER)) return false; boolean r; Marker m = enter_section_(b); r = charListLine(b, l + 1); if (!r) r = stringLine(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // (interpolation | CHAR_LIST_FRAGMENT | quoteEscapeSequence)* public static boolean quoteCharListBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "quoteCharListBody")) return false; Marker m = enter_section_(b, l, _NONE_, QUOTE_CHAR_LIST_BODY, "<quote char list body>"); int c = current_position_(b); while (true) { if (!quoteCharListBody_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "quoteCharListBody", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } // interpolation | CHAR_LIST_FRAGMENT | quoteEscapeSequence private static boolean quoteCharListBody_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "quoteCharListBody_0")) return false; boolean r; Marker m = enter_section_(b); r = interpolation(b, l + 1); if (!r) r = consumeToken(b, CHAR_LIST_FRAGMENT); if (!r) r = quoteEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // quoteHexadecimalEscapeSequence | // escapedEOL | // /* Must be last so that ESCAPE ('\') can be pinned in escapedCharacter without excluding // ("\x") in hexadecimalEscapeSequence */ // escapedCharacter static boolean quoteEscapeSequence(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "quoteEscapeSequence")) return false; if (!nextTokenIs(b, ESCAPE)) return false; boolean r; Marker m = enter_section_(b); r = quoteHexadecimalEscapeSequence(b, l + 1); if (!r) r = escapedEOL(b, l + 1); if (!r) r = escapedCharacter(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // hexadecimalEscapePrefix (openHexadecimalEscapeSequence | enclosedHexadecimalEscapeSequence) public static boolean quoteHexadecimalEscapeSequence(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "quoteHexadecimalEscapeSequence")) return false; if (!nextTokenIs(b, ESCAPE)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, QUOTE_HEXADECIMAL_ESCAPE_SEQUENCE, null); r = hexadecimalEscapePrefix(b, l + 1); p = r; // pin = 1 r = r && quoteHexadecimalEscapeSequence_1(b, l + 1); exit_section_(b, l, m, r, p, null); return r || p; } // openHexadecimalEscapeSequence | enclosedHexadecimalEscapeSequence private static boolean quoteHexadecimalEscapeSequence_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "quoteHexadecimalEscapeSequence_1")) return false; boolean r; Marker m = enter_section_(b); r = openHexadecimalEscapeSequence(b, l + 1); if (!r) r = enclosedHexadecimalEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // (interpolation | STRING_FRAGMENT | quoteEscapeSequence)* public static boolean quoteStringBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "quoteStringBody")) return false; Marker m = enter_section_(b, l, _NONE_, QUOTE_STRING_BODY, "<quote string body>"); int c = current_position_(b); while (true) { if (!quoteStringBody_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "quoteStringBody", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } // interpolation | STRING_FRAGMENT | quoteEscapeSequence private static boolean quoteStringBody_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "quoteStringBody_0")) return false; boolean r; Marker m = enter_section_(b); r = interpolation(b, l + 1); if (!r) r = consumeToken(b, STRING_FRAGMENT); if (!r) r = quoteEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // EOL* RELATIONAL_OPERATOR EOL* public static boolean relationalInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "relationalInfixOperator")) return false; if (!nextTokenIs(b, "<<, >, <=, >=>", EOL, RELATIONAL_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, RELATIONAL_INFIX_OPERATOR, "<<, >, <=, >=>"); r = relationalInfixOperator_0(b, l + 1); r = r && consumeToken(b, RELATIONAL_OPERATOR); r = r && relationalInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean relationalInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "relationalInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "relationalInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean relationalInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "relationalInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "relationalInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // IDENTIFIER_TOKEN | // AFTER | // AND_OPERATOR | // ARROW_OPERATOR | // // NOT ASSOCIATION_OPERATOR // AT_OPERATOR | // // NOT BIT_STRING_OPERATOR because it is a special form // CAPTURE_OPERATOR | // CATCH | // COMPARISON_OPERATOR | // DO | // DUAL_OPERATOR SIGNIFICANT_WHITE_SPACE? | // ELSE | // END | // IN_MATCH_OPERATOR | // IN_OPERATOR | // // NOT MAP_OPERATOR because it is a special form // MATCH_OPERATOR | // MULTIPLICATION_OPERATOR | // OR_OPERATOR | // PIPE_OPERATOR | // RELATIONAL_OPERATOR | // RESCUE | // STAB_OPERATOR | // STRUCT_OPERATOR | // THREE_OPERATOR | // // NOT TUPLE_OPERATOR because it is a special form // TWO_OPERATOR | // UNARY_OPERATOR | // WHEN_OPERATOR | // atomKeyword | // charListLine | // stringLine public static boolean relativeIdentifier(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "relativeIdentifier")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, RELATIVE_IDENTIFIER, "<relative identifier>"); r = consumeToken(b, IDENTIFIER_TOKEN); if (!r) r = consumeToken(b, AFTER); if (!r) r = consumeToken(b, AND_OPERATOR); if (!r) r = consumeToken(b, ARROW_OPERATOR); if (!r) r = consumeToken(b, AT_OPERATOR); if (!r) r = consumeToken(b, CAPTURE_OPERATOR); if (!r) r = consumeToken(b, CATCH); if (!r) r = consumeToken(b, COMPARISON_OPERATOR); if (!r) r = consumeToken(b, DO); if (!r) r = relativeIdentifier_9(b, l + 1); if (!r) r = consumeToken(b, ELSE); if (!r) r = consumeToken(b, END); if (!r) r = consumeToken(b, IN_MATCH_OPERATOR); if (!r) r = consumeToken(b, IN_OPERATOR); if (!r) r = consumeToken(b, MATCH_OPERATOR); if (!r) r = consumeToken(b, MULTIPLICATION_OPERATOR); if (!r) r = consumeToken(b, OR_OPERATOR); if (!r) r = consumeToken(b, PIPE_OPERATOR); if (!r) r = consumeToken(b, RELATIONAL_OPERATOR); if (!r) r = consumeToken(b, RESCUE); if (!r) r = consumeToken(b, STAB_OPERATOR); if (!r) r = consumeToken(b, STRUCT_OPERATOR); if (!r) r = consumeToken(b, THREE_OPERATOR); if (!r) r = consumeToken(b, TWO_OPERATOR); if (!r) r = consumeToken(b, UNARY_OPERATOR); if (!r) r = consumeToken(b, WHEN_OPERATOR); if (!r) r = atomKeyword(b, l + 1); if (!r) r = charListLine(b, l + 1); if (!r) r = stringLine(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // DUAL_OPERATOR SIGNIFICANT_WHITE_SPACE? private static boolean relativeIdentifier_9(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "relativeIdentifier_9")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, DUAL_OPERATOR); r = r && relativeIdentifier_9_1(b, l + 1); exit_section_(b, m, null, r); return r; } // SIGNIFICANT_WHITE_SPACE? private static boolean relativeIdentifier_9_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "relativeIdentifier_9_1")) return false; consumeToken(b, SIGNIFICANT_WHITE_SPACE); return true; } /* ********************************************************** */ // sigilHexadecimalEscapeSequence | // hexadecimalEscapePrefix | // escapedEOL | // /* Must be last so that ESCAPE ('\') can be pinned in escapedCharacter without excluding // ("\x") or ("\\u") in hexadecimalEscapeSequence */ // escapedCharacter static boolean sigilEscapeSequence(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "sigilEscapeSequence")) return false; if (!nextTokenIs(b, ESCAPE)) return false; boolean r; Marker m = enter_section_(b); r = sigilHexadecimalEscapeSequence(b, l + 1); if (!r) r = hexadecimalEscapePrefix(b, l + 1); if (!r) r = escapedEOL(b, l + 1); if (!r) r = escapedCharacter(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // hexadecimalEscapePrefix (openHexadecimalEscapeSequence | enclosedHexadecimalEscapeSequence) public static boolean sigilHexadecimalEscapeSequence(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "sigilHexadecimalEscapeSequence")) return false; if (!nextTokenIs(b, ESCAPE)) return false; boolean r; Marker m = enter_section_(b); r = hexadecimalEscapePrefix(b, l + 1); r = r && sigilHexadecimalEscapeSequence_1(b, l + 1); exit_section_(b, m, SIGIL_HEXADECIMAL_ESCAPE_SEQUENCE, r); return r; } // openHexadecimalEscapeSequence | enclosedHexadecimalEscapeSequence private static boolean sigilHexadecimalEscapeSequence_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "sigilHexadecimalEscapeSequence_1")) return false; boolean r; Marker m = enter_section_(b); r = openHexadecimalEscapeSequence(b, l + 1); if (!r) r = enclosedHexadecimalEscapeSequence(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // SIGIL_MODIFIER* public static boolean sigilModifiers(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "sigilModifiers")) return false; Marker m = enter_section_(b, l, _NONE_, SIGIL_MODIFIERS, "<sigil modifiers>"); int c = current_position_(b); while (true) { if (!consumeToken(b, SIGIL_MODIFIER)) break; if (!empty_element_parsed_guard_(b, "sigilModifiers", c)) break; c = current_position_(b); } exit_section_(b, l, m, true, false, null); return true; } /* ********************************************************** */ // stabOperation (endOfExpression stabOperation)* | // stabBody public static boolean stab(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stab")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, STAB, "<stab>"); r = stab_0(b, l + 1); if (!r) r = stabBody(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // stabOperation (endOfExpression stabOperation)* private static boolean stab_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stab_0")) return false; boolean r; Marker m = enter_section_(b); r = stabOperation(b, l + 1); r = r && stab_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (endOfExpression stabOperation)* private static boolean stab_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stab_0_1")) return false; int c = current_position_(b); while (true) { if (!stab_0_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "stab_0_1", c)) break; c = current_position_(b); } return true; } // endOfExpression stabOperation private static boolean stab_0_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stab_0_1_0")) return false; boolean r; Marker m = enter_section_(b); r = endOfExpression(b, l + 1); r = r && stabOperation(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // stabBodyExpression (endOfExpression stabBodyExpression)* public static boolean stabBody(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabBody")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, STAB_BODY, "<stab body>"); r = stabBodyExpression(b, l + 1); r = r && stabBody_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // (endOfExpression stabBodyExpression)* private static boolean stabBody_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabBody_1")) return false; int c = current_position_(b); while (true) { if (!stabBody_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "stabBody_1", c)) break; c = current_position_(b); } return true; } // endOfExpression stabBodyExpression private static boolean stabBody_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabBody_1_0")) return false; boolean r; Marker m = enter_section_(b); r = endOfExpression(b, l + 1); r = r && stabBodyExpression(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // !stabOperationPrefix expression static boolean stabBodyExpression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabBodyExpression")) return false; boolean r; Marker m = enter_section_(b); r = stabBodyExpression_0(b, l + 1); r = r && expression(b, l + 1); exit_section_(b, m, null, r); return r; } // !stabOperationPrefix private static boolean stabBodyExpression_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabBodyExpression_0")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !stabOperationPrefix(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // EOL* STAB_OPERATOR EOL* public static boolean stabInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabInfixOperator")) return false; if (!nextTokenIs(b, "<->>", EOL, STAB_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, STAB_INFIX_OPERATOR, "<->>"); r = stabInfixOperator_0(b, l + 1); r = r && consumeToken(b, STAB_OPERATOR); r = r && stabInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean stabInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "stabInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean stabInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "stabInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // noParenthesesArguments public static boolean stabNoParenthesesSignature(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabNoParenthesesSignature")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, STAB_NO_PARENTHESES_SIGNATURE, "<stab no parentheses signature>"); r = noParenthesesArguments(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // stabOperationPrefix stabBody? public static boolean stabOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabOperation")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, STAB_OPERATION, "<stab operation>"); r = stabOperationPrefix(b, l + 1); r = r && stabOperation_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // stabBody? private static boolean stabOperation_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabOperation_1")) return false; stabBody(b, l + 1); return true; } /* ********************************************************** */ // stabParenthesesSignature stabInfixOperator | // stabNoParenthesesSignature stabInfixOperator | // stabInfixOperator static boolean stabOperationPrefix(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabOperationPrefix")) return false; boolean r; Marker m = enter_section_(b); r = stabOperationPrefix_0(b, l + 1); if (!r) r = stabOperationPrefix_1(b, l + 1); if (!r) r = stabInfixOperator(b, l + 1); exit_section_(b, m, null, r); return r; } // stabParenthesesSignature stabInfixOperator private static boolean stabOperationPrefix_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabOperationPrefix_0")) return false; boolean r; Marker m = enter_section_(b); r = stabParenthesesSignature(b, l + 1); r = r && stabInfixOperator(b, l + 1); exit_section_(b, m, null, r); return r; } // stabNoParenthesesSignature stabInfixOperator private static boolean stabOperationPrefix_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabOperationPrefix_1")) return false; boolean r; Marker m = enter_section_(b); r = stabNoParenthesesSignature(b, l + 1); r = r && stabInfixOperator(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // parenthesesArguments (whenInfixOperator expression)? public static boolean stabParenthesesSignature(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabParenthesesSignature")) return false; if (!nextTokenIs(b, OPENING_PARENTHESIS)) return false; boolean r; Marker m = enter_section_(b); r = parenthesesArguments(b, l + 1); r = r && stabParenthesesSignature_1(b, l + 1); exit_section_(b, m, STAB_PARENTHESES_SIGNATURE, r); return r; } // (whenInfixOperator expression)? private static boolean stabParenthesesSignature_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabParenthesesSignature_1")) return false; stabParenthesesSignature_1_0(b, l + 1); return true; } // whenInfixOperator expression private static boolean stabParenthesesSignature_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stabParenthesesSignature_1_0")) return false; boolean r; Marker m = enter_section_(b); r = whenInfixOperator(b, l + 1); r = r && expression(b, l + 1); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // STRING_HEREDOC_PROMOTER EOL // stringHeredocLine* // heredocPrefix STRING_HEREDOC_TERMINATOR public static boolean stringHeredoc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stringHeredoc")) return false; if (!nextTokenIs(b, STRING_HEREDOC_PROMOTER)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, STRING_HEREDOC, null); r = consumeTokens(b, 1, STRING_HEREDOC_PROMOTER, EOL); p = r; // pin = 1 r = r && report_error_(b, stringHeredoc_2(b, l + 1)); r = p && report_error_(b, heredocPrefix(b, l + 1)) && r; r = p && consumeToken(b, STRING_HEREDOC_TERMINATOR) && r; exit_section_(b, l, m, r, p, null); return r || p; } // stringHeredocLine* private static boolean stringHeredoc_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stringHeredoc_2")) return false; int c = current_position_(b); while (true) { if (!stringHeredocLine(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "stringHeredoc_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // heredocLinePrefix quoteStringBody EOL public static boolean stringHeredocLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stringHeredocLine")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, STRING_HEREDOC_LINE, "<string heredoc line>"); r = heredocLinePrefix(b, l + 1); r = r && quoteStringBody(b, l + 1); r = r && consumeToken(b, EOL); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // STRING_PROMOTER quoteStringBody STRING_TERMINATOR public static boolean stringLine(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stringLine")) return false; if (!nextTokenIs(b, STRING_PROMOTER)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, STRING_PROMOTER); r = r && quoteStringBody(b, l + 1); r = r && consumeToken(b, STRING_TERMINATOR); exit_section_(b, m, STRING_LINE, r); return r; } /* ********************************************************** */ // mapPrefixOperator mapExpression EOL* mapArguments public static boolean structOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "structOperation")) return false; if (!nextTokenIs(b, STRUCT_OPERATOR)) return false; boolean r; Marker m = enter_section_(b); r = mapPrefixOperator(b, l + 1); r = r && mapExpression(b, l + 1); r = r && structOperation_2(b, l + 1); r = r && mapArguments(b, l + 1); exit_section_(b, m, STRUCT_OPERATION, r); return r; } // EOL* private static boolean structOperation_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "structOperation_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "structOperation_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // EOL* THREE_OPERATOR EOL* public static boolean threeInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "threeInfixOperator")) return false; if (!nextTokenIs(b, "<^^^>", EOL, THREE_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, THREE_INFIX_OPERATOR, "<^^^>"); r = threeInfixOperator_0(b, l + 1); r = r && consumeToken(b, THREE_OPERATOR); r = r && threeInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean threeInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "threeInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "threeInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean threeInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "threeInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "threeInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // OPENING_CURLY EOL* // containerArguments? EOL* // CLOSING_CURLY public static boolean tuple(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "tuple")) return false; if (!nextTokenIs(b, OPENING_CURLY)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, OPENING_CURLY); r = r && tuple_1(b, l + 1); r = r && tuple_2(b, l + 1); r = r && tuple_3(b, l + 1); r = r && consumeToken(b, CLOSING_CURLY); exit_section_(b, m, TUPLE, r); return r; } // EOL* private static boolean tuple_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "tuple_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "tuple_1", c)) break; c = current_position_(b); } return true; } // containerArguments? private static boolean tuple_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "tuple_2")) return false; containerArguments(b, l + 1); return true; } // EOL* private static boolean tuple_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "tuple_3")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "tuple_3", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // EOL* TWO_OPERATOR EOL* public static boolean twoInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "twoInfixOperator")) return false; if (!nextTokenIs(b, "<++, --, .., <>>", EOL, TWO_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, TWO_INFIX_OPERATOR, "<++, --, .., <>>"); r = twoInfixOperator_0(b, l + 1); r = r && consumeToken(b, TWO_OPERATOR); r = r && twoInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean twoInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "twoInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "twoInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean twoInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "twoInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "twoInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // EOL* TYPE_OPERATOR EOL* public static boolean typeInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "typeInfixOperator")) return false; if (!nextTokenIs(b, "<::>", EOL, TYPE_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, TYPE_INFIX_OPERATOR, "<::>"); r = typeInfixOperator_0(b, l + 1); r = r && consumeToken(b, TYPE_OPERATOR); r = r && typeInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean typeInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "typeInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "typeInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean typeInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "typeInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "typeInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // unaryPrefixOperator numeric public static boolean unaryNumericOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unaryNumericOperation")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, UNARY_NUMERIC_OPERATION, "<unary numeric operation>"); r = unaryPrefixOperator(b, l + 1); r = r && numeric(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // (SIGNIFICANT_WHITE_SPACE? DUAL_OPERATOR | UNARY_OPERATOR) EOL* public static boolean unaryPrefixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unaryPrefixOperator")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, UNARY_PREFIX_OPERATOR, "<+, -, !, ^, not, ~~~>"); r = unaryPrefixOperator_0(b, l + 1); r = r && unaryPrefixOperator_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // SIGNIFICANT_WHITE_SPACE? DUAL_OPERATOR | UNARY_OPERATOR private static boolean unaryPrefixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unaryPrefixOperator_0")) return false; boolean r; Marker m = enter_section_(b); r = unaryPrefixOperator_0_0(b, l + 1); if (!r) r = consumeToken(b, UNARY_OPERATOR); exit_section_(b, m, null, r); return r; } // SIGNIFICANT_WHITE_SPACE? DUAL_OPERATOR private static boolean unaryPrefixOperator_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unaryPrefixOperator_0_0")) return false; boolean r; Marker m = enter_section_(b); r = unaryPrefixOperator_0_0_0(b, l + 1); r = r && consumeToken(b, DUAL_OPERATOR); exit_section_(b, m, null, r); return r; } // SIGNIFICANT_WHITE_SPACE? private static boolean unaryPrefixOperator_0_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unaryPrefixOperator_0_0_0")) return false; consumeToken(b, SIGNIFICANT_WHITE_SPACE); return true; } // EOL* private static boolean unaryPrefixOperator_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unaryPrefixOperator_1")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "unaryPrefixOperator_1", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // INVALID_UNKNOWN_BASE_DIGITS public static boolean unknownBaseDigits(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unknownBaseDigits")) return false; if (!nextTokenIs(b, INVALID_UNKNOWN_BASE_DIGITS)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, INVALID_UNKNOWN_BASE_DIGITS); exit_section_(b, m, UNKNOWN_BASE_DIGITS, r); return r; } /* ********************************************************** */ // BASE_WHOLE_NUMBER_PREFIX UNKNOWN_WHOLE_NUMBER_BASE unknownBaseDigits+ public static boolean unknownBaseWholeNumber(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unknownBaseWholeNumber")) return false; if (!nextTokenIs(b, BASE_WHOLE_NUMBER_PREFIX)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, UNKNOWN_BASE_WHOLE_NUMBER, null); r = consumeTokens(b, 2, BASE_WHOLE_NUMBER_PREFIX, UNKNOWN_WHOLE_NUMBER_BASE); p = r; // pin = 2 r = r && unknownBaseWholeNumber_2(b, l + 1); exit_section_(b, l, m, r, p, null); return r || p; } // unknownBaseDigits+ private static boolean unknownBaseWholeNumber_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unknownBaseWholeNumber_2")) return false; boolean r; Marker m = enter_section_(b); r = unknownBaseDigits(b, l + 1); int c = current_position_(b); while (r) { if (!unknownBaseDigits(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "unknownBaseWholeNumber_2", c)) break; c = current_position_(b); } exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // identifier !KEYWORD_PAIR_COLON // noParenthesesManyArgumentsStrict public static boolean unqualifiedNoParenthesesManyArgumentsCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unqualifiedNoParenthesesManyArgumentsCall")) return false; if (!nextTokenIs(b, IDENTIFIER_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = identifier(b, l + 1); r = r && unqualifiedNoParenthesesManyArgumentsCall_1(b, l + 1); r = r && noParenthesesManyArgumentsStrict(b, l + 1); exit_section_(b, m, UNQUALIFIED_NO_PARENTHESES_MANY_ARGUMENTS_CALL, r); return r; } // !KEYWORD_PAIR_COLON private static boolean unqualifiedNoParenthesesManyArgumentsCall_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unqualifiedNoParenthesesManyArgumentsCall_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeToken(b, KEYWORD_PAIR_COLON); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // IDENTIFIER_TOKEN !KEYWORD_PAIR_COLON public static boolean variable(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "variable")) return false; if (!nextTokenIs(b, IDENTIFIER_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, IDENTIFIER_TOKEN); r = r && variable_1(b, l + 1); exit_section_(b, m, VARIABLE, r); return r; } // !KEYWORD_PAIR_COLON private static boolean variable_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "variable_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeToken(b, KEYWORD_PAIR_COLON); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // EOL* WHEN_OPERATOR EOL* public static boolean whenInfixOperator(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "whenInfixOperator")) return false; if (!nextTokenIs(b, "<when>", EOL, WHEN_OPERATOR)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, WHEN_INFIX_OPERATOR, "<when>"); r = whenInfixOperator_0(b, l + 1); r = r && consumeToken(b, WHEN_OPERATOR); r = r && whenInfixOperator_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // EOL* private static boolean whenInfixOperator_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "whenInfixOperator_0")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "whenInfixOperator_0", c)) break; c = current_position_(b); } return true; } // EOL* private static boolean whenInfixOperator_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "whenInfixOperator_2")) return false; int c = current_position_(b); while (true) { if (!consumeToken(b, EOL)) break; if (!empty_element_parsed_guard_(b, "whenInfixOperator_2", c)) break; c = current_position_(b); } return true; } /* ********************************************************** */ // Expression root: matchedExpression // Operator priority table: // 0: PREFIX(matchedCaptureNonNumericOperation) // 1: BINARY(matchedInMatchOperation) // 2: POSTFIX(matchedWhenNoParenthesesKeywordsOperation) // 3: BINARY(matchedWhenOperation) // 4: BINARY(matchedTypeOperation) // 5: BINARY(matchedPipeOperation) // 6: BINARY(matchedMatchOperation) // 7: BINARY(matchedOrOperation) // 8: BINARY(matchedAndOperation) // 9: BINARY(matchedComparisonOperation) // 10: BINARY(matchedRelationalOperation) // 11: BINARY(matchedArrowOperation) // 12: BINARY(matchedInOperation) // 13: BINARY(matchedThreeOperation) // 14: BINARY(matchedTwoOperation) // 15: BINARY(matchedAdditionOperation) // 16: BINARY(matchedMultiplicationOperation) // 17: PREFIX(matchedUnaryNonNumericOperation) // 18: POSTFIX(matchedDotCall) // 19: POSTFIX(matchedQualifiedNoParenthesesCall) // 20: ATOM(matchedAtUnqualifiedNoParenthesesCall) // 21: ATOM(matchedUnqualifiedNoParenthesesCall) // 22: POSTFIX(matchedBracketOperation) // 23: POSTFIX(matchedQualifiedAlias) // 24: POSTFIX(matchedQualifiedMultipleAliases) // 25: POSTFIX(matchedQualifiedBracketOperation) // 26: POSTFIX(matchedQualifiedParenthesesCall) // 27: POSTFIX(matchedQualifiedNoArgumentsCall) // 28: ATOM(matchedAtUnqualifiedBracketOperation) // 29: PREFIX(matchedAtNonNumericOperation) // 30: ATOM(matchedUnqualifiedParenthesesCall) // 31: ATOM(matchedUnqualifiedBracketOperation) // 32: ATOM(matchedUnqualifiedNoArgumentsCall) // 33: ATOM(matchedAccessExpression) public static boolean matchedExpression(PsiBuilder b, int l, int g) { if (!recursion_guard_(b, l, "matchedExpression")) return false; addVariant(b, "<matched expression>"); boolean r, p; Marker m = enter_section_(b, l, _NONE_, "<matched expression>"); r = matchedCaptureNonNumericOperation(b, l + 1); if (!r) r = matchedUnaryNonNumericOperation(b, l + 1); if (!r) r = matchedAtUnqualifiedNoParenthesesCall(b, l + 1); if (!r) r = matchedUnqualifiedNoParenthesesCall(b, l + 1); if (!r) r = matchedAtUnqualifiedBracketOperation(b, l + 1); if (!r) r = matchedAtNonNumericOperation(b, l + 1); if (!r) r = matchedUnqualifiedParenthesesCall(b, l + 1); if (!r) r = matchedUnqualifiedBracketOperation(b, l + 1); if (!r) r = matchedUnqualifiedNoArgumentsCall(b, l + 1); if (!r) r = matchedAccessExpression(b, l + 1); p = r; r = r && matchedExpression_0(b, l + 1, g); exit_section_(b, l, m, null, r, p, null); return r || p; } public static boolean matchedExpression_0(PsiBuilder b, int l, int g) { if (!recursion_guard_(b, l, "matchedExpression_0")) return false; boolean r = true; while (true) { Marker m = enter_section_(b, l, _LEFT_, null); if (g < 1 && inMatchInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 1); exit_section_(b, l, m, MATCHED_IN_MATCH_OPERATION, r, true, null); } else if (g < 2 && matchedWhenNoParenthesesKeywordsOperation_0(b, l + 1)) { r = true; exit_section_(b, l, m, MATCHED_WHEN_OPERATION, r, true, null); } else if (g < 3 && whenInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 2); exit_section_(b, l, m, MATCHED_WHEN_OPERATION, r, true, null); } else if (g < 4 && typeInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 3); exit_section_(b, l, m, MATCHED_TYPE_OPERATION, r, true, null); } else if (g < 5 && pipeInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 4); exit_section_(b, l, m, MATCHED_PIPE_OPERATION, r, true, null); } else if (g < 6 && matchInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 5); exit_section_(b, l, m, MATCHED_MATCH_OPERATION, r, true, null); } else if (g < 7 && orInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 7); exit_section_(b, l, m, MATCHED_OR_OPERATION, r, true, null); } else if (g < 8 && andInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 8); exit_section_(b, l, m, MATCHED_AND_OPERATION, r, true, null); } else if (g < 9 && comparisonInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 9); exit_section_(b, l, m, MATCHED_COMPARISON_OPERATION, r, true, null); } else if (g < 10 && relationalInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 10); exit_section_(b, l, m, MATCHED_RELATIONAL_OPERATION, r, true, null); } else if (g < 11 && arrowInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 11); exit_section_(b, l, m, MATCHED_ARROW_OPERATION, r, true, null); } else if (g < 12 && inInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 12); exit_section_(b, l, m, MATCHED_IN_OPERATION, r, true, null); } else if (g < 13 && threeInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 13); exit_section_(b, l, m, MATCHED_THREE_OPERATION, r, true, null); } else if (g < 14 && twoInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 13); exit_section_(b, l, m, MATCHED_TWO_OPERATION, r, true, null); } else if (g < 15 && additionInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 15); exit_section_(b, l, m, MATCHED_ADDITION_OPERATION, r, true, null); } else if (g < 16 && multiplicationInfixOperator(b, l + 1)) { r = matchedExpression(b, l, 16); exit_section_(b, l, m, MATCHED_MULTIPLICATION_OPERATION, r, true, null); } else if (g < 18 && matchedDotCall_0(b, l + 1)) { r = true; exit_section_(b, l, m, MATCHED_DOT_CALL, r, true, null); } else if (g < 19 && matchedQualifiedNoParenthesesCall_0(b, l + 1)) { r = true; exit_section_(b, l, m, MATCHED_QUALIFIED_NO_PARENTHESES_CALL, r, true, null); } else if (g < 22 && bracketArguments(b, l + 1)) { r = true; exit_section_(b, l, m, MATCHED_BRACKET_OPERATION, r, true, null); } else if (g < 23 && matchedQualifiedAlias_0(b, l + 1)) { r = true; exit_section_(b, l, m, MATCHED_QUALIFIED_ALIAS, r, true, null); } else if (g < 24 && matchedQualifiedMultipleAliases_0(b, l + 1)) { r = true; exit_section_(b, l, m, MATCHED_QUALIFIED_MULTIPLE_ALIASES, r, true, null); } else if (g < 25 && matchedQualifiedBracketOperation_0(b, l + 1)) { r = true; exit_section_(b, l, m, MATCHED_QUALIFIED_BRACKET_OPERATION, r, true, null); } else if (g < 26 && matchedQualifiedParenthesesCall_0(b, l + 1)) { r = true; exit_section_(b, l, m, MATCHED_QUALIFIED_PARENTHESES_CALL, r, true, null); } else if (g < 27 && matchedQualifiedNoArgumentsCall_0(b, l + 1)) { r = true; exit_section_(b, l, m, MATCHED_QUALIFIED_NO_ARGUMENTS_CALL, r, true, null); } else { exit_section_(b, l, m, null, false, false, null); break; } } return r; } public static boolean matchedCaptureNonNumericOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedCaptureNonNumericOperation")) return false; if (!nextTokenIsSmart(b, CAPTURE_OPERATOR)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, null); r = matchedCaptureNonNumericOperation_0(b, l + 1); p = r; r = p && matchedExpression(b, l, 0); exit_section_(b, l, m, MATCHED_CAPTURE_NON_NUMERIC_OPERATION, r, p, null); return r || p; } // capturePrefixOperator !numeric private static boolean matchedCaptureNonNumericOperation_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedCaptureNonNumericOperation_0")) return false; boolean r; Marker m = enter_section_(b); r = capturePrefixOperator(b, l + 1); r = r && matchedCaptureNonNumericOperation_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // !numeric private static boolean matchedCaptureNonNumericOperation_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedCaptureNonNumericOperation_0_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !numeric(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // whenInfixOperator noParenthesesKeywords private static boolean matchedWhenNoParenthesesKeywordsOperation_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedWhenNoParenthesesKeywordsOperation_0")) return false; boolean r; Marker m = enter_section_(b); r = whenInfixOperator(b, l + 1); r = r && noParenthesesKeywords(b, l + 1); exit_section_(b, m, null, r); return r; } public static boolean matchedUnaryNonNumericOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedUnaryNonNumericOperation")) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, null); r = matchedUnaryNonNumericOperation_0(b, l + 1); p = r; r = p && matchedExpression(b, l, 17); exit_section_(b, l, m, MATCHED_UNARY_NON_NUMERIC_OPERATION, r, p, null); return r || p; } // unaryPrefixOperator !numeric private static boolean matchedUnaryNonNumericOperation_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedUnaryNonNumericOperation_0")) return false; boolean r; Marker m = enter_section_(b); r = unaryPrefixOperator(b, l + 1); r = r && matchedUnaryNonNumericOperation_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // !numeric private static boolean matchedUnaryNonNumericOperation_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedUnaryNonNumericOperation_0_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !numeric(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // dotInfixOperator parenthesesArguments parenthesesArguments? private static boolean matchedDotCall_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedDotCall_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && parenthesesArguments(b, l + 1); r = r && matchedDotCall_0_2(b, l + 1); exit_section_(b, m, null, r); return r; } // parenthesesArguments? private static boolean matchedDotCall_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedDotCall_0_2")) return false; parenthesesArguments(b, l + 1); return true; } // dotInfixOperator relativeIdentifier noParenthesesOneArgument private static boolean matchedQualifiedNoParenthesesCall_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedQualifiedNoParenthesesCall_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && relativeIdentifier(b, l + 1); r = r && noParenthesesOneArgument(b, l + 1); exit_section_(b, m, null, r); return r; } // atIdentifier noParenthesesOneArgument public static boolean matchedAtUnqualifiedNoParenthesesCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedAtUnqualifiedNoParenthesesCall")) return false; if (!nextTokenIsSmart(b, AT_OPERATOR)) return false; boolean r; Marker m = enter_section_(b); r = atIdentifier(b, l + 1); r = r && noParenthesesOneArgument(b, l + 1); exit_section_(b, m, MATCHED_AT_UNQUALIFIED_NO_PARENTHESES_CALL, r); return r; } // identifier noParenthesesOneArgument public static boolean matchedUnqualifiedNoParenthesesCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedUnqualifiedNoParenthesesCall")) return false; if (!nextTokenIsSmart(b, IDENTIFIER_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = identifier(b, l + 1); r = r && noParenthesesOneArgument(b, l + 1); exit_section_(b, m, MATCHED_UNQUALIFIED_NO_PARENTHESES_CALL, r); return r; } // dotInfixOperator alias private static boolean matchedQualifiedAlias_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedQualifiedAlias_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && alias(b, l + 1); exit_section_(b, m, null, r); return r; } // dotInfixOperator multipleAliases private static boolean matchedQualifiedMultipleAliases_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedQualifiedMultipleAliases_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && multipleAliases(b, l + 1); exit_section_(b, m, null, r); return r; } // dotInfixOperator relativeIdentifier CALL bracketArguments private static boolean matchedQualifiedBracketOperation_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedQualifiedBracketOperation_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && relativeIdentifier(b, l + 1); r = r && consumeToken(b, CALL); r = r && bracketArguments(b, l + 1); exit_section_(b, m, null, r); return r; } // dotInfixOperator relativeIdentifier matchedParenthesesArguments private static boolean matchedQualifiedParenthesesCall_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedQualifiedParenthesesCall_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && relativeIdentifier(b, l + 1); r = r && matchedParenthesesArguments(b, l + 1); exit_section_(b, m, null, r); return r; } // dotInfixOperator relativeIdentifier !CALL private static boolean matchedQualifiedNoArgumentsCall_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedQualifiedNoArgumentsCall_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && relativeIdentifier(b, l + 1); r = r && matchedQualifiedNoArgumentsCall_0_2(b, l + 1); exit_section_(b, m, null, r); return r; } // !CALL private static boolean matchedQualifiedNoArgumentsCall_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedQualifiedNoArgumentsCall_0_2")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeTokenSmart(b, CALL); exit_section_(b, l, m, r, false, null); return r; } // atPrefixOperator IDENTIFIER_TOKEN CALL bracketArguments public static boolean matchedAtUnqualifiedBracketOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedAtUnqualifiedBracketOperation")) return false; if (!nextTokenIsSmart(b, AT_OPERATOR)) return false; boolean r; Marker m = enter_section_(b); r = atPrefixOperator(b, l + 1); r = r && consumeTokensSmart(b, 0, IDENTIFIER_TOKEN, CALL); r = r && bracketArguments(b, l + 1); exit_section_(b, m, MATCHED_AT_UNQUALIFIED_BRACKET_OPERATION, r); return r; } public static boolean matchedAtNonNumericOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedAtNonNumericOperation")) return false; if (!nextTokenIsSmart(b, AT_OPERATOR)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, null); r = matchedAtNonNumericOperation_0(b, l + 1); p = r; r = p && matchedExpression(b, l, 29); exit_section_(b, l, m, MATCHED_AT_NON_NUMERIC_OPERATION, r, p, null); return r || p; } // atPrefixOperator !numeric private static boolean matchedAtNonNumericOperation_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedAtNonNumericOperation_0")) return false; boolean r; Marker m = enter_section_(b); r = atPrefixOperator(b, l + 1); r = r && matchedAtNonNumericOperation_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // !numeric private static boolean matchedAtNonNumericOperation_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedAtNonNumericOperation_0_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !numeric(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // identifier matchedParenthesesArguments public static boolean matchedUnqualifiedParenthesesCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedUnqualifiedParenthesesCall")) return false; if (!nextTokenIsSmart(b, IDENTIFIER_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = identifier(b, l + 1); r = r && matchedParenthesesArguments(b, l + 1); exit_section_(b, m, MATCHED_UNQUALIFIED_PARENTHESES_CALL, r); return r; } // identifier CALL bracketArguments public static boolean matchedUnqualifiedBracketOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedUnqualifiedBracketOperation")) return false; if (!nextTokenIsSmart(b, IDENTIFIER_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = identifier(b, l + 1); r = r && consumeToken(b, CALL); r = r && bracketArguments(b, l + 1); exit_section_(b, m, MATCHED_UNQUALIFIED_BRACKET_OPERATION, r); return r; } // identifier !KEYWORD_PAIR_COLON public static boolean matchedUnqualifiedNoArgumentsCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedUnqualifiedNoArgumentsCall")) return false; if (!nextTokenIsSmart(b, IDENTIFIER_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = identifier(b, l + 1); r = r && matchedUnqualifiedNoArgumentsCall_1(b, l + 1); exit_section_(b, m, MATCHED_UNQUALIFIED_NO_ARGUMENTS_CALL, r); return r; } // !KEYWORD_PAIR_COLON private static boolean matchedUnqualifiedNoArgumentsCall_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedUnqualifiedNoArgumentsCall_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeTokenSmart(b, KEYWORD_PAIR_COLON); exit_section_(b, l, m, r, false, null); return r; } // accessExpression public static boolean matchedAccessExpression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "matchedAccessExpression")) return false; boolean r; Marker m = enter_section_(b, l, _COLLAPSE_, ACCESS_EXPRESSION, "<matched access expression>"); r = accessExpression(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // Expression root: unmatchedExpression // Operator priority table: // 0: PREFIX(unmatchedCaptureNonNumericOperation) // 1: BINARY(unmatchedInMatchOperation) // 2: POSTFIX(unmatchedWhenNoParenthesesKeywordsOperation) // 3: BINARY(unmatchedWhenOperation) // 4: BINARY(unmatchedTypeOperation) // 5: BINARY(unmatchedPipeOperation) // 6: BINARY(unmatchedMatchOperation) // 7: BINARY(unmatchedOrOperation) // 8: BINARY(unmatchedAndOperation) // 9: BINARY(unmatchedComparisonOperation) // 10: BINARY(unmatchedRelationalOperation) // 11: BINARY(unmatchedArrowOperation) // 12: BINARY(unmatchedInOperation) // 13: BINARY(unmatchedThreeOperation) // 14: BINARY(unmatchedTwoOperation) // 15: BINARY(unmatchedAdditionOperation) // 16: BINARY(unmatchedMultiplicationOperation) // 17: PREFIX(unmatchedUnaryNonNumericOperation) // 18: POSTFIX(unmatchedDotCall) // 19: POSTFIX(unmatchedQualifiedNoParenthesesCall) // 20: ATOM(unmatchedAtUnqualifiedNoParenthesesCall) // 21: ATOM(unmatchedUnqualifiedNoParenthesesCall) // 22: POSTFIX(unmatchedBracketOperation) // 23: POSTFIX(unmatchedQualifiedAlias) // 24: POSTFIX(unmatchedQualifiedMultipleAliases) // 25: POSTFIX(unmatchedQualifiedBracketOperation) // 26: POSTFIX(unmatchedQualifiedParenthesesCall) // 27: POSTFIX(unmatchedQualifiedNoArgumentsCall) // 28: ATOM(unmatchedAtUnqualifiedBracketOperation) // 29: PREFIX(unmatchedAtNonNumericOperation) // 30: ATOM(unmatchedUnqualifiedParenthesesCall) // 31: ATOM(unmatchedUnqualifiedBracketOperation) // 32: ATOM(unmatchedUnqualifiedNoArgumentsCall) // 33: ATOM(unmatchedAccessExpression) public static boolean unmatchedExpression(PsiBuilder b, int l, int g) { if (!recursion_guard_(b, l, "unmatchedExpression")) return false; addVariant(b, "<unmatched expression>"); boolean r, p; Marker m = enter_section_(b, l, _NONE_, "<unmatched expression>"); r = unmatchedCaptureNonNumericOperation(b, l + 1); if (!r) r = unmatchedUnaryNonNumericOperation(b, l + 1); if (!r) r = unmatchedAtUnqualifiedNoParenthesesCall(b, l + 1); if (!r) r = unmatchedUnqualifiedNoParenthesesCall(b, l + 1); if (!r) r = unmatchedAtUnqualifiedBracketOperation(b, l + 1); if (!r) r = unmatchedAtNonNumericOperation(b, l + 1); if (!r) r = unmatchedUnqualifiedParenthesesCall(b, l + 1); if (!r) r = unmatchedUnqualifiedBracketOperation(b, l + 1); if (!r) r = unmatchedUnqualifiedNoArgumentsCall(b, l + 1); if (!r) r = unmatchedAccessExpression(b, l + 1); p = r; r = r && unmatchedExpression_0(b, l + 1, g); exit_section_(b, l, m, null, r, p, null); return r || p; } public static boolean unmatchedExpression_0(PsiBuilder b, int l, int g) { if (!recursion_guard_(b, l, "unmatchedExpression_0")) return false; boolean r = true; while (true) { Marker m = enter_section_(b, l, _LEFT_, null); if (g < 1 && inMatchInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 1); exit_section_(b, l, m, UNMATCHED_IN_MATCH_OPERATION, r, true, null); } else if (g < 2 && unmatchedWhenNoParenthesesKeywordsOperation_0(b, l + 1)) { r = true; exit_section_(b, l, m, UNMATCHED_WHEN_OPERATION, r, true, null); } else if (g < 3 && whenInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 2); exit_section_(b, l, m, UNMATCHED_WHEN_OPERATION, r, true, null); } else if (g < 4 && typeInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 3); exit_section_(b, l, m, UNMATCHED_TYPE_OPERATION, r, true, null); } else if (g < 5 && pipeInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 4); exit_section_(b, l, m, UNMATCHED_PIPE_OPERATION, r, true, null); } else if (g < 6 && matchInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 5); exit_section_(b, l, m, UNMATCHED_MATCH_OPERATION, r, true, null); } else if (g < 7 && orInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 7); exit_section_(b, l, m, UNMATCHED_OR_OPERATION, r, true, null); } else if (g < 8 && andInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 8); exit_section_(b, l, m, UNMATCHED_AND_OPERATION, r, true, null); } else if (g < 9 && comparisonInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 9); exit_section_(b, l, m, UNMATCHED_COMPARISON_OPERATION, r, true, null); } else if (g < 10 && relationalInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 10); exit_section_(b, l, m, UNMATCHED_RELATIONAL_OPERATION, r, true, null); } else if (g < 11 && arrowInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 11); exit_section_(b, l, m, UNMATCHED_ARROW_OPERATION, r, true, null); } else if (g < 12 && inInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 12); exit_section_(b, l, m, UNMATCHED_IN_OPERATION, r, true, null); } else if (g < 13 && threeInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 13); exit_section_(b, l, m, UNMATCHED_THREE_OPERATION, r, true, null); } else if (g < 14 && twoInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 13); exit_section_(b, l, m, UNMATCHED_TWO_OPERATION, r, true, null); } else if (g < 15 && additionInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 15); exit_section_(b, l, m, UNMATCHED_ADDITION_OPERATION, r, true, null); } else if (g < 16 && multiplicationInfixOperator(b, l + 1)) { r = unmatchedExpression(b, l, 16); exit_section_(b, l, m, UNMATCHED_MULTIPLICATION_OPERATION, r, true, null); } else if (g < 18 && unmatchedDotCall_0(b, l + 1)) { r = true; exit_section_(b, l, m, UNMATCHED_DOT_CALL, r, true, null); } else if (g < 19 && unmatchedQualifiedNoParenthesesCall_0(b, l + 1)) { r = true; exit_section_(b, l, m, UNMATCHED_QUALIFIED_NO_PARENTHESES_CALL, r, true, null); } else if (g < 22 && bracketArguments(b, l + 1)) { r = true; exit_section_(b, l, m, UNMATCHED_BRACKET_OPERATION, r, true, null); } else if (g < 23 && unmatchedQualifiedAlias_0(b, l + 1)) { r = true; exit_section_(b, l, m, UNMATCHED_QUALIFIED_ALIAS, r, true, null); } else if (g < 24 && unmatchedQualifiedMultipleAliases_0(b, l + 1)) { r = true; exit_section_(b, l, m, UNMATCHED_QUALIFIED_MULTIPLE_ALIASES, r, true, null); } else if (g < 25 && unmatchedQualifiedBracketOperation_0(b, l + 1)) { r = true; exit_section_(b, l, m, UNMATCHED_QUALIFIED_BRACKET_OPERATION, r, true, null); } else if (g < 26 && unmatchedQualifiedParenthesesCall_0(b, l + 1)) { r = true; exit_section_(b, l, m, UNMATCHED_QUALIFIED_PARENTHESES_CALL, r, true, null); } else if (g < 27 && unmatchedQualifiedNoArgumentsCall_0(b, l + 1)) { r = true; exit_section_(b, l, m, UNMATCHED_QUALIFIED_NO_ARGUMENTS_CALL, r, true, null); } else { exit_section_(b, l, m, null, false, false, null); break; } } return r; } public static boolean unmatchedCaptureNonNumericOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedCaptureNonNumericOperation")) return false; if (!nextTokenIsSmart(b, CAPTURE_OPERATOR)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, null); r = unmatchedCaptureNonNumericOperation_0(b, l + 1); p = r; r = p && unmatchedExpression(b, l, 0); exit_section_(b, l, m, UNMATCHED_CAPTURE_NON_NUMERIC_OPERATION, r, p, null); return r || p; } // capturePrefixOperator !numeric private static boolean unmatchedCaptureNonNumericOperation_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedCaptureNonNumericOperation_0")) return false; boolean r; Marker m = enter_section_(b); r = capturePrefixOperator(b, l + 1); r = r && unmatchedCaptureNonNumericOperation_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // !numeric private static boolean unmatchedCaptureNonNumericOperation_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedCaptureNonNumericOperation_0_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !numeric(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // whenInfixOperator noParenthesesKeywords private static boolean unmatchedWhenNoParenthesesKeywordsOperation_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedWhenNoParenthesesKeywordsOperation_0")) return false; boolean r; Marker m = enter_section_(b); r = whenInfixOperator(b, l + 1); r = r && noParenthesesKeywords(b, l + 1); exit_section_(b, m, null, r); return r; } public static boolean unmatchedUnaryNonNumericOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedUnaryNonNumericOperation")) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, null); r = unmatchedUnaryNonNumericOperation_0(b, l + 1); p = r; r = p && unmatchedExpression(b, l, 17); exit_section_(b, l, m, UNMATCHED_UNARY_NON_NUMERIC_OPERATION, r, p, null); return r || p; } // unaryPrefixOperator !numeric private static boolean unmatchedUnaryNonNumericOperation_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedUnaryNonNumericOperation_0")) return false; boolean r; Marker m = enter_section_(b); r = unaryPrefixOperator(b, l + 1); r = r && unmatchedUnaryNonNumericOperation_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // !numeric private static boolean unmatchedUnaryNonNumericOperation_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedUnaryNonNumericOperation_0_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !numeric(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // dotInfixOperator parenthesesArguments parenthesesArguments? doBlock? private static boolean unmatchedDotCall_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedDotCall_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && parenthesesArguments(b, l + 1); r = r && unmatchedDotCall_0_2(b, l + 1); r = r && unmatchedDotCall_0_3(b, l + 1); exit_section_(b, m, null, r); return r; } // parenthesesArguments? private static boolean unmatchedDotCall_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedDotCall_0_2")) return false; parenthesesArguments(b, l + 1); return true; } // doBlock? private static boolean unmatchedDotCall_0_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedDotCall_0_3")) return false; doBlock(b, l + 1); return true; } // dotInfixOperator relativeIdentifier noParenthesesOneArgument doBlock? private static boolean unmatchedQualifiedNoParenthesesCall_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedQualifiedNoParenthesesCall_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && relativeIdentifier(b, l + 1); r = r && noParenthesesOneArgument(b, l + 1); r = r && unmatchedQualifiedNoParenthesesCall_0_3(b, l + 1); exit_section_(b, m, null, r); return r; } // doBlock? private static boolean unmatchedQualifiedNoParenthesesCall_0_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedQualifiedNoParenthesesCall_0_3")) return false; doBlock(b, l + 1); return true; } // atIdentifier noParenthesesOneArgument doBlock? public static boolean unmatchedAtUnqualifiedNoParenthesesCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedAtUnqualifiedNoParenthesesCall")) return false; if (!nextTokenIsSmart(b, AT_OPERATOR)) return false; boolean r; Marker m = enter_section_(b); r = atIdentifier(b, l + 1); r = r && noParenthesesOneArgument(b, l + 1); r = r && unmatchedAtUnqualifiedNoParenthesesCall_2(b, l + 1); exit_section_(b, m, UNMATCHED_AT_UNQUALIFIED_NO_PARENTHESES_CALL, r); return r; } // doBlock? private static boolean unmatchedAtUnqualifiedNoParenthesesCall_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedAtUnqualifiedNoParenthesesCall_2")) return false; doBlock(b, l + 1); return true; } // identifier noParenthesesOneArgument doBlock? public static boolean unmatchedUnqualifiedNoParenthesesCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedUnqualifiedNoParenthesesCall")) return false; if (!nextTokenIsSmart(b, IDENTIFIER_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = identifier(b, l + 1); r = r && noParenthesesOneArgument(b, l + 1); r = r && unmatchedUnqualifiedNoParenthesesCall_2(b, l + 1); exit_section_(b, m, UNMATCHED_UNQUALIFIED_NO_PARENTHESES_CALL, r); return r; } // doBlock? private static boolean unmatchedUnqualifiedNoParenthesesCall_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedUnqualifiedNoParenthesesCall_2")) return false; doBlock(b, l + 1); return true; } // dotInfixOperator alias private static boolean unmatchedQualifiedAlias_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedQualifiedAlias_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && alias(b, l + 1); exit_section_(b, m, null, r); return r; } // dotInfixOperator multipleAliases private static boolean unmatchedQualifiedMultipleAliases_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedQualifiedMultipleAliases_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && multipleAliases(b, l + 1); exit_section_(b, m, null, r); return r; } // dotInfixOperator relativeIdentifier CALL bracketArguments private static boolean unmatchedQualifiedBracketOperation_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedQualifiedBracketOperation_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && relativeIdentifier(b, l + 1); r = r && consumeToken(b, CALL); r = r && bracketArguments(b, l + 1); exit_section_(b, m, null, r); return r; } // dotInfixOperator relativeIdentifier matchedParenthesesArguments doBlock? private static boolean unmatchedQualifiedParenthesesCall_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedQualifiedParenthesesCall_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && relativeIdentifier(b, l + 1); r = r && matchedParenthesesArguments(b, l + 1); r = r && unmatchedQualifiedParenthesesCall_0_3(b, l + 1); exit_section_(b, m, null, r); return r; } // doBlock? private static boolean unmatchedQualifiedParenthesesCall_0_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedQualifiedParenthesesCall_0_3")) return false; doBlock(b, l + 1); return true; } // dotInfixOperator relativeIdentifier !CALL doBlock? private static boolean unmatchedQualifiedNoArgumentsCall_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedQualifiedNoArgumentsCall_0")) return false; boolean r; Marker m = enter_section_(b); r = dotInfixOperator(b, l + 1); r = r && relativeIdentifier(b, l + 1); r = r && unmatchedQualifiedNoArgumentsCall_0_2(b, l + 1); r = r && unmatchedQualifiedNoArgumentsCall_0_3(b, l + 1); exit_section_(b, m, null, r); return r; } // !CALL private static boolean unmatchedQualifiedNoArgumentsCall_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedQualifiedNoArgumentsCall_0_2")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeTokenSmart(b, CALL); exit_section_(b, l, m, r, false, null); return r; } // doBlock? private static boolean unmatchedQualifiedNoArgumentsCall_0_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedQualifiedNoArgumentsCall_0_3")) return false; doBlock(b, l + 1); return true; } // atPrefixOperator IDENTIFIER_TOKEN CALL bracketArguments public static boolean unmatchedAtUnqualifiedBracketOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedAtUnqualifiedBracketOperation")) return false; if (!nextTokenIsSmart(b, AT_OPERATOR)) return false; boolean r; Marker m = enter_section_(b); r = atPrefixOperator(b, l + 1); r = r && consumeTokensSmart(b, 0, IDENTIFIER_TOKEN, CALL); r = r && bracketArguments(b, l + 1); exit_section_(b, m, UNMATCHED_AT_UNQUALIFIED_BRACKET_OPERATION, r); return r; } public static boolean unmatchedAtNonNumericOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedAtNonNumericOperation")) return false; if (!nextTokenIsSmart(b, AT_OPERATOR)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, null); r = unmatchedAtNonNumericOperation_0(b, l + 1); p = r; r = p && unmatchedExpression(b, l, 29); exit_section_(b, l, m, UNMATCHED_AT_NON_NUMERIC_OPERATION, r, p, null); return r || p; } // atPrefixOperator !numeric private static boolean unmatchedAtNonNumericOperation_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedAtNonNumericOperation_0")) return false; boolean r; Marker m = enter_section_(b); r = atPrefixOperator(b, l + 1); r = r && unmatchedAtNonNumericOperation_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // !numeric private static boolean unmatchedAtNonNumericOperation_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedAtNonNumericOperation_0_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !numeric(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // identifier matchedParenthesesArguments doBlock? public static boolean unmatchedUnqualifiedParenthesesCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedUnqualifiedParenthesesCall")) return false; if (!nextTokenIsSmart(b, IDENTIFIER_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = identifier(b, l + 1); r = r && matchedParenthesesArguments(b, l + 1); r = r && unmatchedUnqualifiedParenthesesCall_2(b, l + 1); exit_section_(b, m, UNMATCHED_UNQUALIFIED_PARENTHESES_CALL, r); return r; } // doBlock? private static boolean unmatchedUnqualifiedParenthesesCall_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedUnqualifiedParenthesesCall_2")) return false; doBlock(b, l + 1); return true; } // identifier CALL bracketArguments public static boolean unmatchedUnqualifiedBracketOperation(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedUnqualifiedBracketOperation")) return false; if (!nextTokenIsSmart(b, IDENTIFIER_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = identifier(b, l + 1); r = r && consumeToken(b, CALL); r = r && bracketArguments(b, l + 1); exit_section_(b, m, UNMATCHED_UNQUALIFIED_BRACKET_OPERATION, r); return r; } // identifier !KEYWORD_PAIR_COLON doBlock? public static boolean unmatchedUnqualifiedNoArgumentsCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedUnqualifiedNoArgumentsCall")) return false; if (!nextTokenIsSmart(b, IDENTIFIER_TOKEN)) return false; boolean r; Marker m = enter_section_(b); r = identifier(b, l + 1); r = r && unmatchedUnqualifiedNoArgumentsCall_1(b, l + 1); r = r && unmatchedUnqualifiedNoArgumentsCall_2(b, l + 1); exit_section_(b, m, UNMATCHED_UNQUALIFIED_NO_ARGUMENTS_CALL, r); return r; } // !KEYWORD_PAIR_COLON private static boolean unmatchedUnqualifiedNoArgumentsCall_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedUnqualifiedNoArgumentsCall_1")) return false; boolean r; Marker m = enter_section_(b, l, _NOT_); r = !consumeTokenSmart(b, KEYWORD_PAIR_COLON); exit_section_(b, l, m, r, false, null); return r; } // doBlock? private static boolean unmatchedUnqualifiedNoArgumentsCall_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedUnqualifiedNoArgumentsCall_2")) return false; doBlock(b, l + 1); return true; } // accessExpression public static boolean unmatchedAccessExpression(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "unmatchedAccessExpression")) return false; boolean r; Marker m = enter_section_(b, l, _COLLAPSE_, ACCESS_EXPRESSION, "<unmatched access expression>"); r = accessExpression(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } final static Parser expressionRecoverWhile_parser_ = new Parser() { public boolean parse(PsiBuilder b, int l) { return expressionRecoverWhile(b, l + 1); } }; }