// This is a generated file. Not intended for manual editing. package com.nasmlanguage.parser; import com.intellij.lang.PsiBuilder; import com.intellij.lang.PsiBuilder.Marker; import static com.nasmlanguage.psi.NASMTypes.*; import static com.nasmlanguage.parser.NASMParserUtil.*; import com.intellij.psi.tree.IElementType; import com.intellij.lang.ASTNode; import com.intellij.psi.tree.TokenSet; import com.intellij.lang.PsiParser; import com.intellij.lang.LightPsiParser; @SuppressWarnings({"SimplifiableIfStatement", "UnusedAssignment"}) public class NASMParser 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); r = parse_root_(t, b); exit_section_(b, 0, m, t, r, true, TRUE_CONDITION); } protected boolean parse_root_(IElementType t, PsiBuilder b) { return parse_root_(t, b, 0); } static boolean parse_root_(IElementType t, PsiBuilder b, int l) { return NASMFile(b, l + 1); } public static final TokenSet[] EXTENDS_SETS_ = new TokenSet[] { create_token_set_(ADDRESS, BITWISE_AND_EXPR, BITWISE_NOT_EXPR, BITWISE_OR_EXPR, BITWISE_XOR_EXPR, BIT_SHIFT_L_EXPR, BIT_SHIFT_R_EXPR, DIV_EXPR, END_DIRECTIVE, EXPR, IDENTIFIER, LABEL_IDENTIFIER, LOGICAL_AND_EXPR, LOGICAL_OR_EXPR, LOGICAL_XOR_EXPR, MACRO_CALL, MACRO_DEF_CALL, MACRO_PARAM_COUNTER, MACRO_PARAM_REFERENCE, MACRO_VAR_REFERENCE, MINUS_EXPR, MNEMONIC, MODULUS_EXPR, MUL_EXPR, NUMERIC_LITERAL, PARENTHESIS_EXPR, PLUS_EXPR, REG, SEG, SEGMENT_ADDRESS, STR, STRUCTURE_FIELD, TOKEN_CONCAT_EXPR), }; /* ********************************************************** */ // SQUARE_L MINUS? Expr SQUARE_R static boolean AddressInternal(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "AddressInternal")) return false; if (!nextTokenIs(b, SQUARE_L)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_); r = consumeToken(b, SQUARE_L); p = r; // pin = 1 r = r && report_error_(b, AddressInternal_1(b, l + 1)); r = p && report_error_(b, Expr(b, l + 1, -1)) && r; r = p && consumeToken(b, SQUARE_R) && r; exit_section_(b, l, m, r, p, null); return r || p; } // MINUS? private static boolean AddressInternal_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "AddressInternal_1")) return false; consumeToken(b, MINUS); return true; } /* ********************************************************** */ // ASSIGN_TAG Identifier Expr public static boolean Assign(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Assign")) return false; if (!nextTokenIs(b, ASSIGN_TAG)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, ASSIGN_TAG); r = r && Identifier(b, l + 1); r = r && Expr(b, l + 1, -1); exit_section_(b, m, ASSIGN, r); return r; } /* ********************************************************** */ // Expr (EQUALEQUAL|NOTEQUAL|GREATERTHAN|LESSTHAN|GREATERTHANOREQUAL|LESSTHANOREQUAL|SEPARATOR) Expr static boolean Condition(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Condition")) return false; boolean r; Marker m = enter_section_(b); r = Expr(b, l + 1, -1); r = r && Condition_1(b, l + 1); r = r && Expr(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // EQUALEQUAL|NOTEQUAL|GREATERTHAN|LESSTHAN|GREATERTHANOREQUAL|LESSTHANOREQUAL|SEPARATOR private static boolean Condition_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Condition_1")) return false; boolean r; r = consumeToken(b, EQUALEQUAL); if (!r) r = consumeToken(b, NOTEQUAL); if (!r) r = consumeToken(b, GREATERTHAN); if (!r) r = consumeToken(b, LESSTHAN); if (!r) r = consumeToken(b, GREATERTHANOREQUAL); if (!r) r = consumeToken(b, LESSTHANOREQUAL); if (!r) r = consumeToken(b, SEPARATOR); return r; } /* ********************************************************** */ // (IfConditionTag (Condition|MacroCondition|Expr) NL* Element* (((ELIF_TAG (Condition|MacroCondition|Expr))|ELSE_TAG) NL* Element*)*) ENDIF_TAG NL* public static boolean Conditional(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, CONDITIONAL, "<conditional>"); r = Conditional_0(b, l + 1); r = r && consumeToken(b, ENDIF_TAG); r = r && Conditional_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // IfConditionTag (Condition|MacroCondition|Expr) NL* Element* (((ELIF_TAG (Condition|MacroCondition|Expr))|ELSE_TAG) NL* Element*)* private static boolean Conditional_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional_0")) return false; boolean r; Marker m = enter_section_(b); r = IfConditionTag(b, l + 1); r = r && Conditional_0_1(b, l + 1); r = r && Conditional_0_2(b, l + 1); r = r && Conditional_0_3(b, l + 1); r = r && Conditional_0_4(b, l + 1); exit_section_(b, m, null, r); return r; } // Condition|MacroCondition|Expr private static boolean Conditional_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional_0_1")) return false; boolean r; r = Condition(b, l + 1); if (!r) r = MacroCondition(b, l + 1); if (!r) r = Expr(b, l + 1, -1); return r; } // NL* private static boolean Conditional_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional_0_2")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Conditional_0_2", c)) break; } return true; } // Element* private static boolean Conditional_0_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional_0_3")) return false; while (true) { int c = current_position_(b); if (!Element(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "Conditional_0_3", c)) break; } return true; } // (((ELIF_TAG (Condition|MacroCondition|Expr))|ELSE_TAG) NL* Element*)* private static boolean Conditional_0_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional_0_4")) return false; while (true) { int c = current_position_(b); if (!Conditional_0_4_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "Conditional_0_4", c)) break; } return true; } // ((ELIF_TAG (Condition|MacroCondition|Expr))|ELSE_TAG) NL* Element* private static boolean Conditional_0_4_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional_0_4_0")) return false; boolean r; Marker m = enter_section_(b); r = Conditional_0_4_0_0(b, l + 1); r = r && Conditional_0_4_0_1(b, l + 1); r = r && Conditional_0_4_0_2(b, l + 1); exit_section_(b, m, null, r); return r; } // (ELIF_TAG (Condition|MacroCondition|Expr))|ELSE_TAG private static boolean Conditional_0_4_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional_0_4_0_0")) return false; boolean r; Marker m = enter_section_(b); r = Conditional_0_4_0_0_0(b, l + 1); if (!r) r = consumeToken(b, ELSE_TAG); exit_section_(b, m, null, r); return r; } // ELIF_TAG (Condition|MacroCondition|Expr) private static boolean Conditional_0_4_0_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional_0_4_0_0_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, ELIF_TAG); r = r && Conditional_0_4_0_0_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // Condition|MacroCondition|Expr private static boolean Conditional_0_4_0_0_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional_0_4_0_0_0_1")) return false; boolean r; r = Condition(b, l + 1); if (!r) r = MacroCondition(b, l + 1); if (!r) r = Expr(b, l + 1, -1); return r; } // NL* private static boolean Conditional_0_4_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional_0_4_0_1")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Conditional_0_4_0_1", c)) break; } return true; } // Element* private static boolean Conditional_0_4_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional_0_4_0_2")) return false; while (true) { int c = current_position_(b); if (!Element(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "Conditional_0_4_0_2", c)) break; } return true; } // NL* private static boolean Conditional_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Conditional_2")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Conditional_2", c)) break; } return true; } /* ********************************************************** */ // ID EQU ((MINUS|PLUS|BITWISE_NOT)? Expr)* NL* public static boolean Constant(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Constant")) return false; if (!nextTokenIs(b, ID)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, ID, EQU); r = r && Constant_2(b, l + 1); r = r && Constant_3(b, l + 1); exit_section_(b, m, CONSTANT, r); return r; } // ((MINUS|PLUS|BITWISE_NOT)? Expr)* private static boolean Constant_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Constant_2")) return false; while (true) { int c = current_position_(b); if (!Constant_2_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "Constant_2", c)) break; } return true; } // (MINUS|PLUS|BITWISE_NOT)? Expr private static boolean Constant_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Constant_2_0")) return false; boolean r; Marker m = enter_section_(b); r = Constant_2_0_0(b, l + 1); r = r && Expr(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // (MINUS|PLUS|BITWISE_NOT)? private static boolean Constant_2_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Constant_2_0_0")) return false; Constant_2_0_0_0(b, l + 1); return true; } // MINUS|PLUS|BITWISE_NOT private static boolean Constant_2_0_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Constant_2_0_0_0")) return false; boolean r; r = consumeToken(b, MINUS); if (!r) r = consumeToken(b, PLUS); if (!r) r = consumeToken(b, BITWISE_NOT); return r; } // NL* private static boolean Constant_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Constant_3")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Constant_3", c)) break; } return true; } /* ********************************************************** */ // ID? DATA_OP DataValue NL* public static boolean DataElement(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataElement")) return false; if (!nextTokenIs(b, "<data element>", DATA_OP, ID)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, DATA_ELEMENT, "<data element>"); r = DataElement_0(b, l + 1); r = r && consumeToken(b, DATA_OP); r = r && DataValue(b, l + 1); r = r && DataElement_3(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // ID? private static boolean DataElement_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataElement_0")) return false; consumeToken(b, ID); return true; } // NL* private static boolean DataElement_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataElement_3")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "DataElement_3", c)) break; } return true; } /* ********************************************************** */ // (MINUS|PLUS|BITWISE_NOT)? (Expr|STRING|LabelIdentifier) (SEPARATOR ((MINUS|PLUS)? (Expr|STRING|LabelIdentifier)))* static boolean DataValue(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataValue")) return false; boolean r; Marker m = enter_section_(b); r = DataValue_0(b, l + 1); r = r && DataValue_1(b, l + 1); r = r && DataValue_2(b, l + 1); exit_section_(b, m, null, r); return r; } // (MINUS|PLUS|BITWISE_NOT)? private static boolean DataValue_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataValue_0")) return false; DataValue_0_0(b, l + 1); return true; } // MINUS|PLUS|BITWISE_NOT private static boolean DataValue_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataValue_0_0")) return false; boolean r; r = consumeToken(b, MINUS); if (!r) r = consumeToken(b, PLUS); if (!r) r = consumeToken(b, BITWISE_NOT); return r; } // Expr|STRING|LabelIdentifier private static boolean DataValue_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataValue_1")) return false; boolean r; r = Expr(b, l + 1, -1); if (!r) r = consumeToken(b, STRING); if (!r) r = LabelIdentifier(b, l + 1); return r; } // (SEPARATOR ((MINUS|PLUS)? (Expr|STRING|LabelIdentifier)))* private static boolean DataValue_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataValue_2")) return false; while (true) { int c = current_position_(b); if (!DataValue_2_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "DataValue_2", c)) break; } return true; } // SEPARATOR ((MINUS|PLUS)? (Expr|STRING|LabelIdentifier)) private static boolean DataValue_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataValue_2_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, SEPARATOR); r = r && DataValue_2_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (MINUS|PLUS)? (Expr|STRING|LabelIdentifier) private static boolean DataValue_2_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataValue_2_0_1")) return false; boolean r; Marker m = enter_section_(b); r = DataValue_2_0_1_0(b, l + 1); r = r && DataValue_2_0_1_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (MINUS|PLUS)? private static boolean DataValue_2_0_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataValue_2_0_1_0")) return false; DataValue_2_0_1_0_0(b, l + 1); return true; } // MINUS|PLUS private static boolean DataValue_2_0_1_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataValue_2_0_1_0_0")) return false; boolean r; r = consumeToken(b, MINUS); if (!r) r = consumeToken(b, PLUS); return r; } // Expr|STRING|LabelIdentifier private static boolean DataValue_2_0_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DataValue_2_0_1_1")) return false; boolean r; r = Expr(b, l + 1, -1); if (!r) r = consumeToken(b, STRING); if (!r) r = LabelIdentifier(b, l + 1); return r; } /* ********************************************************** */ // ((DEFINE_TAG Identifier ROUND_L (Expr (SEPARATOR Expr)*)? ROUND_R Expr) // | (DEFINE_TAG Identifier (Expr|(PERCENT SQUARE_L Expr SQUARE_R))?)) SEPARATOR? NL* public static boolean Define(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define")) return false; if (!nextTokenIs(b, DEFINE_TAG)) return false; boolean r; Marker m = enter_section_(b); r = Define_0(b, l + 1); r = r && Define_1(b, l + 1); r = r && Define_2(b, l + 1); exit_section_(b, m, DEFINE, r); return r; } // (DEFINE_TAG Identifier ROUND_L (Expr (SEPARATOR Expr)*)? ROUND_R Expr) // | (DEFINE_TAG Identifier (Expr|(PERCENT SQUARE_L Expr SQUARE_R))?) private static boolean Define_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define_0")) return false; boolean r; Marker m = enter_section_(b); r = Define_0_0(b, l + 1); if (!r) r = Define_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // DEFINE_TAG Identifier ROUND_L (Expr (SEPARATOR Expr)*)? ROUND_R Expr private static boolean Define_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define_0_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, DEFINE_TAG); r = r && Identifier(b, l + 1); r = r && consumeToken(b, ROUND_L); r = r && Define_0_0_3(b, l + 1); r = r && consumeToken(b, ROUND_R); r = r && Expr(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // (Expr (SEPARATOR Expr)*)? private static boolean Define_0_0_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define_0_0_3")) return false; Define_0_0_3_0(b, l + 1); return true; } // Expr (SEPARATOR Expr)* private static boolean Define_0_0_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define_0_0_3_0")) return false; boolean r; Marker m = enter_section_(b); r = Expr(b, l + 1, -1); r = r && Define_0_0_3_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (SEPARATOR Expr)* private static boolean Define_0_0_3_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define_0_0_3_0_1")) return false; while (true) { int c = current_position_(b); if (!Define_0_0_3_0_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "Define_0_0_3_0_1", c)) break; } return true; } // SEPARATOR Expr private static boolean Define_0_0_3_0_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define_0_0_3_0_1_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, SEPARATOR); r = r && Expr(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // DEFINE_TAG Identifier (Expr|(PERCENT SQUARE_L Expr SQUARE_R))? private static boolean Define_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define_0_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, DEFINE_TAG); r = r && Identifier(b, l + 1); r = r && Define_0_1_2(b, l + 1); exit_section_(b, m, null, r); return r; } // (Expr|(PERCENT SQUARE_L Expr SQUARE_R))? private static boolean Define_0_1_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define_0_1_2")) return false; Define_0_1_2_0(b, l + 1); return true; } // Expr|(PERCENT SQUARE_L Expr SQUARE_R) private static boolean Define_0_1_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define_0_1_2_0")) return false; boolean r; Marker m = enter_section_(b); r = Expr(b, l + 1, -1); if (!r) r = Define_0_1_2_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // PERCENT SQUARE_L Expr SQUARE_R private static boolean Define_0_1_2_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define_0_1_2_0_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, PERCENT, SQUARE_L); r = r && Expr(b, l + 1, -1); r = r && consumeToken(b, SQUARE_R); exit_section_(b, m, null, r); return r; } // SEPARATOR? private static boolean Define_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define_1")) return false; consumeToken(b, SEPARATOR); return true; } // NL* private static boolean Define_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Define_2")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Define_2", c)) break; } return true; } /* ********************************************************** */ // (DirectiveDecl|DirectiveDeclBrackets|MapOption) NL* public static boolean Directive(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Directive")) return false; if (!nextTokenIs(b, "<directive>", DIRECTIVE_OP, SQUARE_L)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, DIRECTIVE, "<directive>"); r = Directive_0(b, l + 1); r = r && Directive_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // DirectiveDecl|DirectiveDeclBrackets|MapOption private static boolean Directive_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Directive_0")) return false; boolean r; r = DirectiveDecl(b, l + 1); if (!r) r = DirectiveDeclBrackets(b, l + 1); if (!r) r = MapOption(b, l + 1); return r; } // NL* private static boolean Directive_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Directive_1")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Directive_1", c)) break; } return true; } /* ********************************************************** */ // DIRECTIVE_OP (Expr SEPARATOR?)* static boolean DirectiveDecl(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DirectiveDecl")) return false; if (!nextTokenIs(b, DIRECTIVE_OP)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, DIRECTIVE_OP); r = r && DirectiveDecl_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (Expr SEPARATOR?)* private static boolean DirectiveDecl_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DirectiveDecl_1")) return false; while (true) { int c = current_position_(b); if (!DirectiveDecl_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "DirectiveDecl_1", c)) break; } return true; } // Expr SEPARATOR? private static boolean DirectiveDecl_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DirectiveDecl_1_0")) return false; boolean r; Marker m = enter_section_(b); r = Expr(b, l + 1, -1); r = r && DirectiveDecl_1_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // SEPARATOR? private static boolean DirectiveDecl_1_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DirectiveDecl_1_0_1")) return false; consumeToken(b, SEPARATOR); return true; } /* ********************************************************** */ // SQUARE_L DIRECTIVE_OP Expr* SQUARE_R static boolean DirectiveDeclBrackets(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DirectiveDeclBrackets")) return false; if (!nextTokenIs(b, SQUARE_L)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, SQUARE_L, DIRECTIVE_OP); r = r && DirectiveDeclBrackets_2(b, l + 1); r = r && consumeToken(b, SQUARE_R); exit_section_(b, m, null, r); return r; } // Expr* private static boolean DirectiveDeclBrackets_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "DirectiveDeclBrackets_2")) return false; while (true) { int c = current_position_(b); if (!Expr(b, l + 1, -1)) break; if (!empty_element_parsed_guard_(b, "DirectiveDeclBrackets_2", c)) break; } return true; } /* ********************************************************** */ // COMMENT // | Section // | Segment // | Label // | Preprocessor // | Directive // | EndDirective // | Constant // | Structure // | Instruction // | DataElement // | IStrucElement // | NL // | ID static boolean Element(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Element")) return false; boolean r; r = consumeToken(b, COMMENT); if (!r) r = Section(b, l + 1); if (!r) r = Segment(b, l + 1); if (!r) r = Label(b, l + 1); if (!r) r = Preprocessor(b, l + 1); if (!r) r = Directive(b, l + 1); if (!r) r = EndDirective(b, l + 1); if (!r) r = Constant(b, l + 1); if (!r) r = Structure(b, l + 1); if (!r) r = Instruction(b, l + 1); if (!r) r = DataElement(b, l + 1); if (!r) r = IStrucElement(b, l + 1); if (!r) r = consumeToken(b, NL); if (!r) r = consumeToken(b, ID); return r; } /* ********************************************************** */ // ERROR_TAG NL* public static boolean Error(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Error")) return false; if (!nextTokenIs(b, ERROR_TAG)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, ERROR_TAG); r = r && Error_1(b, l + 1); exit_section_(b, m, ERROR, r); return r; } // NL* private static boolean Error_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Error_1")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Error_1", c)) break; } return true; } /* ********************************************************** */ // ISTRUC_TAG Identifier NL* ((IStrucElement|Conditional) NL*)* IEND_TAG public static boolean IStruc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "IStruc")) return false; if (!nextTokenIs(b, ISTRUC_TAG)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, ISTRUC_TAG); r = r && Identifier(b, l + 1); r = r && IStruc_2(b, l + 1); r = r && IStruc_3(b, l + 1); r = r && consumeToken(b, IEND_TAG); exit_section_(b, m, I_STRUC, r); return r; } // NL* private static boolean IStruc_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "IStruc_2")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "IStruc_2", c)) break; } return true; } // ((IStrucElement|Conditional) NL*)* private static boolean IStruc_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "IStruc_3")) return false; while (true) { int c = current_position_(b); if (!IStruc_3_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "IStruc_3", c)) break; } return true; } // (IStrucElement|Conditional) NL* private static boolean IStruc_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "IStruc_3_0")) return false; boolean r; Marker m = enter_section_(b); r = IStruc_3_0_0(b, l + 1); r = r && IStruc_3_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // IStrucElement|Conditional private static boolean IStruc_3_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "IStruc_3_0_0")) return false; boolean r; r = IStrucElement(b, l + 1); if (!r) r = Conditional(b, l + 1); return r; } // NL* private static boolean IStruc_3_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "IStruc_3_0_1")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "IStruc_3_0_1", c)) break; } return true; } /* ********************************************************** */ // AT_TAG (StructureField|LabelIdentifier|Identifier) SEPARATOR DATA_OP DataValue static boolean IStrucElement(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "IStrucElement")) return false; if (!nextTokenIs(b, AT_TAG)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, AT_TAG); r = r && IStrucElement_1(b, l + 1); r = r && consumeTokens(b, 0, SEPARATOR, DATA_OP); r = r && DataValue(b, l + 1); exit_section_(b, m, null, r); return r; } // StructureField|LabelIdentifier|Identifier private static boolean IStrucElement_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "IStrucElement_1")) return false; boolean r; r = StructureField(b, l + 1); if (!r) r = LabelIdentifier(b, l + 1); if (!r) r = Identifier(b, l + 1); return r; } /* ********************************************************** */ // IFMACRO_TAG|IFCTX_TAG|IFNUM_TAG|IFSTR_TAG|IFIDN_TAG|IFDEF_TAG|IFID_TAG|IF_TAG static boolean IfConditionTag(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "IfConditionTag")) return false; boolean r; r = consumeToken(b, IFMACRO_TAG); if (!r) r = consumeToken(b, IFCTX_TAG); if (!r) r = consumeToken(b, IFNUM_TAG); if (!r) r = consumeToken(b, IFSTR_TAG); if (!r) r = consumeToken(b, IFIDN_TAG); if (!r) r = consumeToken(b, IFDEF_TAG); if (!r) r = consumeToken(b, IFID_TAG); if (!r) r = consumeToken(b, IF_TAG); return r; } /* ********************************************************** */ // INCLUDE_TAG (ID_EXTENSION|STRING) public static boolean Include(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Include")) return false; if (!nextTokenIs(b, INCLUDE_TAG)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, INCLUDE_TAG); r = r && Include_1(b, l + 1); exit_section_(b, m, INCLUDE, r); return r; } // ID_EXTENSION|STRING private static boolean Include_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Include_1")) return false; boolean r; r = consumeToken(b, ID_EXTENSION); if (!r) r = consumeToken(b, STRING); return r; } /* ********************************************************** */ // Prefix* (Mnemonic|(ID COMMENT)) (((((BITWISE_NOT|MINUS|PLUS)? Expr) SEPARATOR)* ((BITWISE_NOT|MINUS|PLUS)? Expr))|(SIZE_TYPE (BITWISE_NOT|MINUS|PLUS)? ROUND_L Expr ROUND_R))? public static boolean Instruction(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, INSTRUCTION, "<instruction>"); r = Instruction_0(b, l + 1); r = r && Instruction_1(b, l + 1); r = r && Instruction_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // Prefix* private static boolean Instruction_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_0")) return false; while (true) { int c = current_position_(b); if (!Prefix(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "Instruction_0", c)) break; } return true; } // Mnemonic|(ID COMMENT) private static boolean Instruction_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_1")) return false; boolean r; Marker m = enter_section_(b); r = Mnemonic(b, l + 1); if (!r) r = Instruction_1_1(b, l + 1); exit_section_(b, m, null, r); return r; } // ID COMMENT private static boolean Instruction_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_1_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, ID, COMMENT); exit_section_(b, m, null, r); return r; } // (((((BITWISE_NOT|MINUS|PLUS)? Expr) SEPARATOR)* ((BITWISE_NOT|MINUS|PLUS)? Expr))|(SIZE_TYPE (BITWISE_NOT|MINUS|PLUS)? ROUND_L Expr ROUND_R))? private static boolean Instruction_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2")) return false; Instruction_2_0(b, l + 1); return true; } // ((((BITWISE_NOT|MINUS|PLUS)? Expr) SEPARATOR)* ((BITWISE_NOT|MINUS|PLUS)? Expr))|(SIZE_TYPE (BITWISE_NOT|MINUS|PLUS)? ROUND_L Expr ROUND_R) private static boolean Instruction_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0")) return false; boolean r; Marker m = enter_section_(b); r = Instruction_2_0_0(b, l + 1); if (!r) r = Instruction_2_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (((BITWISE_NOT|MINUS|PLUS)? Expr) SEPARATOR)* ((BITWISE_NOT|MINUS|PLUS)? Expr) private static boolean Instruction_2_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0_0")) return false; boolean r; Marker m = enter_section_(b); r = Instruction_2_0_0_0(b, l + 1); r = r && Instruction_2_0_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (((BITWISE_NOT|MINUS|PLUS)? Expr) SEPARATOR)* private static boolean Instruction_2_0_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0_0_0")) return false; while (true) { int c = current_position_(b); if (!Instruction_2_0_0_0_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "Instruction_2_0_0_0", c)) break; } return true; } // ((BITWISE_NOT|MINUS|PLUS)? Expr) SEPARATOR private static boolean Instruction_2_0_0_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0_0_0_0")) return false; boolean r; Marker m = enter_section_(b); r = Instruction_2_0_0_0_0_0(b, l + 1); r = r && consumeToken(b, SEPARATOR); exit_section_(b, m, null, r); return r; } // (BITWISE_NOT|MINUS|PLUS)? Expr private static boolean Instruction_2_0_0_0_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0_0_0_0_0")) return false; boolean r; Marker m = enter_section_(b); r = Instruction_2_0_0_0_0_0_0(b, l + 1); r = r && Expr(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // (BITWISE_NOT|MINUS|PLUS)? private static boolean Instruction_2_0_0_0_0_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0_0_0_0_0_0")) return false; Instruction_2_0_0_0_0_0_0_0(b, l + 1); return true; } // BITWISE_NOT|MINUS|PLUS private static boolean Instruction_2_0_0_0_0_0_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0_0_0_0_0_0_0")) return false; boolean r; r = consumeToken(b, BITWISE_NOT); if (!r) r = consumeToken(b, MINUS); if (!r) r = consumeToken(b, PLUS); return r; } // (BITWISE_NOT|MINUS|PLUS)? Expr private static boolean Instruction_2_0_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0_0_1")) return false; boolean r; Marker m = enter_section_(b); r = Instruction_2_0_0_1_0(b, l + 1); r = r && Expr(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // (BITWISE_NOT|MINUS|PLUS)? private static boolean Instruction_2_0_0_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0_0_1_0")) return false; Instruction_2_0_0_1_0_0(b, l + 1); return true; } // BITWISE_NOT|MINUS|PLUS private static boolean Instruction_2_0_0_1_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0_0_1_0_0")) return false; boolean r; r = consumeToken(b, BITWISE_NOT); if (!r) r = consumeToken(b, MINUS); if (!r) r = consumeToken(b, PLUS); return r; } // SIZE_TYPE (BITWISE_NOT|MINUS|PLUS)? ROUND_L Expr ROUND_R private static boolean Instruction_2_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, SIZE_TYPE); r = r && Instruction_2_0_1_1(b, l + 1); r = r && consumeToken(b, ROUND_L); r = r && Expr(b, l + 1, -1); r = r && consumeToken(b, ROUND_R); exit_section_(b, m, null, r); return r; } // (BITWISE_NOT|MINUS|PLUS)? private static boolean Instruction_2_0_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0_1_1")) return false; Instruction_2_0_1_1_0(b, l + 1); return true; } // BITWISE_NOT|MINUS|PLUS private static boolean Instruction_2_0_1_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Instruction_2_0_1_1_0")) return false; boolean r; r = consumeToken(b, BITWISE_NOT); if (!r) r = consumeToken(b, MINUS); if (!r) r = consumeToken(b, PLUS); return r; } /* ********************************************************** */ // (LBL_DEF (Instruction|DataElement|Structure)? NL*) | (LabelDefMacro (Instruction|DataElement|Structure)? NL*) public static boolean Label(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Label")) return false; if (!nextTokenIs(b, "<label>", ID, LBL_DEF)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, LABEL, "<label>"); r = Label_0(b, l + 1); if (!r) r = Label_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // LBL_DEF (Instruction|DataElement|Structure)? NL* private static boolean Label_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Label_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, LBL_DEF); r = r && Label_0_1(b, l + 1); r = r && Label_0_2(b, l + 1); exit_section_(b, m, null, r); return r; } // (Instruction|DataElement|Structure)? private static boolean Label_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Label_0_1")) return false; Label_0_1_0(b, l + 1); return true; } // Instruction|DataElement|Structure private static boolean Label_0_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Label_0_1_0")) return false; boolean r; r = Instruction(b, l + 1); if (!r) r = DataElement(b, l + 1); if (!r) r = Structure(b, l + 1); return r; } // NL* private static boolean Label_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Label_0_2")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Label_0_2", c)) break; } return true; } // LabelDefMacro (Instruction|DataElement|Structure)? NL* private static boolean Label_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Label_1")) return false; boolean r; Marker m = enter_section_(b); r = LabelDefMacro(b, l + 1); r = r && Label_1_1(b, l + 1); r = r && Label_1_2(b, l + 1); exit_section_(b, m, null, r); return r; } // (Instruction|DataElement|Structure)? private static boolean Label_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Label_1_1")) return false; Label_1_1_0(b, l + 1); return true; } // Instruction|DataElement|Structure private static boolean Label_1_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Label_1_1_0")) return false; boolean r; r = Instruction(b, l + 1); if (!r) r = DataElement(b, l + 1); if (!r) r = Structure(b, l + 1); return r; } // NL* private static boolean Label_1_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Label_1_2")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Label_1_2", c)) break; } return true; } /* ********************************************************** */ // ID MacroParenthesis COLON NL* public static boolean LabelDefMacro(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "LabelDefMacro")) return false; if (!nextTokenIs(b, ID)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, ID); r = r && MacroParenthesis(b, l + 1); r = r && consumeToken(b, COLON); r = r && LabelDefMacro_3(b, l + 1); exit_section_(b, m, LABEL_DEF_MACRO, r); return r; } // NL* private static boolean LabelDefMacro_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "LabelDefMacro_3")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "LabelDefMacro_3", c)) break; } return true; } /* ********************************************************** */ // MACRO_TAG Identifier MacroParams MacroDefaultParam? NL* ((MacroLabel|Label|DataElement|Instruction|Directive|Preprocessor|Expr) NL*)* MACRO_END_TAG public static boolean Macro(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Macro")) return false; if (!nextTokenIs(b, MACRO_TAG)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, MACRO, null); r = consumeToken(b, MACRO_TAG); p = r; // pin = 1 r = r && report_error_(b, Identifier(b, l + 1)); r = p && report_error_(b, MacroParams(b, l + 1)) && r; r = p && report_error_(b, Macro_3(b, l + 1)) && r; r = p && report_error_(b, Macro_4(b, l + 1)) && r; r = p && report_error_(b, Macro_5(b, l + 1)) && r; r = p && consumeToken(b, MACRO_END_TAG) && r; exit_section_(b, l, m, r, p, null); return r || p; } // MacroDefaultParam? private static boolean Macro_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Macro_3")) return false; MacroDefaultParam(b, l + 1); return true; } // NL* private static boolean Macro_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Macro_4")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Macro_4", c)) break; } return true; } // ((MacroLabel|Label|DataElement|Instruction|Directive|Preprocessor|Expr) NL*)* private static boolean Macro_5(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Macro_5")) return false; while (true) { int c = current_position_(b); if (!Macro_5_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "Macro_5", c)) break; } return true; } // (MacroLabel|Label|DataElement|Instruction|Directive|Preprocessor|Expr) NL* private static boolean Macro_5_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Macro_5_0")) return false; boolean r; Marker m = enter_section_(b); r = Macro_5_0_0(b, l + 1); r = r && Macro_5_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // MacroLabel|Label|DataElement|Instruction|Directive|Preprocessor|Expr private static boolean Macro_5_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Macro_5_0_0")) return false; boolean r; r = MacroLabel(b, l + 1); if (!r) r = Label(b, l + 1); if (!r) r = DataElement(b, l + 1); if (!r) r = Instruction(b, l + 1); if (!r) r = Directive(b, l + 1); if (!r) r = Preprocessor(b, l + 1); if (!r) r = Expr(b, l + 1, -1); return r; } // NL* private static boolean Macro_5_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Macro_5_0_1")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Macro_5_0_1", c)) break; } return true; } /* ********************************************************** */ // Identifier MacroParams MacroDefaultParam? static boolean MacroCondition(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroCondition")) return false; boolean r; Marker m = enter_section_(b); r = Identifier(b, l + 1); r = r && MacroParams(b, l + 1); r = r && MacroCondition_2(b, l + 1); exit_section_(b, m, null, r); return r; } // MacroDefaultParam? private static boolean MacroCondition_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroCondition_2")) return false; MacroDefaultParam(b, l + 1); return true; } /* ********************************************************** */ // Instruction|STRING|REGISTER|NumericLiteral|MacroCall static boolean MacroDefaultParam(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroDefaultParam")) return false; boolean r; r = Instruction(b, l + 1); if (!r) r = consumeToken(b, STRING); if (!r) r = consumeToken(b, REGISTER); if (!r) r = NumericLiteral(b, l + 1); if (!r) r = MacroCall(b, l + 1); return r; } /* ********************************************************** */ // MACRO_PARAM_LBL_DEF (Instruction|DataElement)? NL* public static boolean MacroLabel(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroLabel")) return false; if (!nextTokenIs(b, MACRO_PARAM_LBL_DEF)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, MACRO_PARAM_LBL_DEF); r = r && MacroLabel_1(b, l + 1); r = r && MacroLabel_2(b, l + 1); exit_section_(b, m, MACRO_LABEL, r); return r; } // (Instruction|DataElement)? private static boolean MacroLabel_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroLabel_1")) return false; MacroLabel_1_0(b, l + 1); return true; } // Instruction|DataElement private static boolean MacroLabel_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroLabel_1_0")) return false; boolean r; r = Instruction(b, l + 1); if (!r) r = DataElement(b, l + 1); return r; } // NL* private static boolean MacroLabel_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroLabel_2")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "MacroLabel_2", c)) break; } return true; } /* ********************************************************** */ // ((NumericLiteral MINUS NumericLiteral (PLUS|TIMES)?)|(NumericLiteral MINUS TIMES)|(NumericLiteral PLUS?)) MACRO_NOLIST_QUAL? static boolean MacroParams(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParams")) return false; boolean r; Marker m = enter_section_(b); r = MacroParams_0(b, l + 1); r = r && MacroParams_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (NumericLiteral MINUS NumericLiteral (PLUS|TIMES)?)|(NumericLiteral MINUS TIMES)|(NumericLiteral PLUS?) private static boolean MacroParams_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParams_0")) return false; boolean r; Marker m = enter_section_(b); r = MacroParams_0_0(b, l + 1); if (!r) r = MacroParams_0_1(b, l + 1); if (!r) r = MacroParams_0_2(b, l + 1); exit_section_(b, m, null, r); return r; } // NumericLiteral MINUS NumericLiteral (PLUS|TIMES)? private static boolean MacroParams_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParams_0_0")) return false; boolean r; Marker m = enter_section_(b); r = NumericLiteral(b, l + 1); r = r && consumeToken(b, MINUS); r = r && NumericLiteral(b, l + 1); r = r && MacroParams_0_0_3(b, l + 1); exit_section_(b, m, null, r); return r; } // (PLUS|TIMES)? private static boolean MacroParams_0_0_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParams_0_0_3")) return false; MacroParams_0_0_3_0(b, l + 1); return true; } // PLUS|TIMES private static boolean MacroParams_0_0_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParams_0_0_3_0")) return false; boolean r; r = consumeToken(b, PLUS); if (!r) r = consumeToken(b, TIMES); return r; } // NumericLiteral MINUS TIMES private static boolean MacroParams_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParams_0_1")) return false; boolean r; Marker m = enter_section_(b); r = NumericLiteral(b, l + 1); r = r && consumeTokens(b, 0, MINUS, TIMES); exit_section_(b, m, null, r); return r; } // NumericLiteral PLUS? private static boolean MacroParams_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParams_0_2")) return false; boolean r; Marker m = enter_section_(b); r = NumericLiteral(b, l + 1); r = r && MacroParams_0_2_1(b, l + 1); exit_section_(b, m, null, r); return r; } // PLUS? private static boolean MacroParams_0_2_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParams_0_2_1")) return false; consumeToken(b, PLUS); return true; } // MACRO_NOLIST_QUAL? private static boolean MacroParams_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParams_1")) return false; consumeToken(b, MACRO_NOLIST_QUAL); return true; } /* ********************************************************** */ // ROUND_L (Expr (SEPARATOR Expr)*)? ROUND_R static boolean MacroParenthesis(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParenthesis")) return false; if (!nextTokenIs(b, ROUND_L)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_); r = consumeToken(b, ROUND_L); p = r; // pin = 1 r = r && report_error_(b, MacroParenthesis_1(b, l + 1)); r = p && consumeToken(b, ROUND_R) && r; exit_section_(b, l, m, r, p, null); return r || p; } // (Expr (SEPARATOR Expr)*)? private static boolean MacroParenthesis_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParenthesis_1")) return false; MacroParenthesis_1_0(b, l + 1); return true; } // Expr (SEPARATOR Expr)* private static boolean MacroParenthesis_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParenthesis_1_0")) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_); r = Expr(b, l + 1, -1); p = r; // pin = 1 r = r && MacroParenthesis_1_0_1(b, l + 1); exit_section_(b, l, m, r, p, null); return r || p; } // (SEPARATOR Expr)* private static boolean MacroParenthesis_1_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParenthesis_1_0_1")) return false; while (true) { int c = current_position_(b); if (!MacroParenthesis_1_0_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "MacroParenthesis_1_0_1", c)) break; } return true; } // SEPARATOR Expr private static boolean MacroParenthesis_1_0_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParenthesis_1_0_1_0")) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_); r = consumeToken(b, SEPARATOR); p = r; // pin = 1 r = r && Expr(b, l + 1, -1); exit_section_(b, l, m, r, p, null); return r || p; } /* ********************************************************** */ // SQUARE_L ('map'|'MAP') (('all'|'ALL')|('brief'|'BRIEF')|('sections'|'SECTIONS')|('segments'|'SEGMENTS')|('symbols'|'SYMBOLS'))? MAP_FILE SQUARE_R public static boolean MapOption(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MapOption")) return false; if (!nextTokenIs(b, SQUARE_L)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, SQUARE_L); r = r && MapOption_1(b, l + 1); r = r && MapOption_2(b, l + 1); r = r && consumeTokens(b, 0, MAP_FILE, SQUARE_R); exit_section_(b, m, MAP_OPTION, r); return r; } // 'map'|'MAP' private static boolean MapOption_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MapOption_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, "map"); if (!r) r = consumeToken(b, "MAP"); exit_section_(b, m, null, r); return r; } // (('all'|'ALL')|('brief'|'BRIEF')|('sections'|'SECTIONS')|('segments'|'SEGMENTS')|('symbols'|'SYMBOLS'))? private static boolean MapOption_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MapOption_2")) return false; MapOption_2_0(b, l + 1); return true; } // ('all'|'ALL')|('brief'|'BRIEF')|('sections'|'SECTIONS')|('segments'|'SEGMENTS')|('symbols'|'SYMBOLS') private static boolean MapOption_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MapOption_2_0")) return false; boolean r; Marker m = enter_section_(b); r = MapOption_2_0_0(b, l + 1); if (!r) r = MapOption_2_0_1(b, l + 1); if (!r) r = MapOption_2_0_2(b, l + 1); if (!r) r = MapOption_2_0_3(b, l + 1); if (!r) r = MapOption_2_0_4(b, l + 1); exit_section_(b, m, null, r); return r; } // 'all'|'ALL' private static boolean MapOption_2_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MapOption_2_0_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, "all"); if (!r) r = consumeToken(b, "ALL"); exit_section_(b, m, null, r); return r; } // 'brief'|'BRIEF' private static boolean MapOption_2_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MapOption_2_0_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, "brief"); if (!r) r = consumeToken(b, "BRIEF"); exit_section_(b, m, null, r); return r; } // 'sections'|'SECTIONS' private static boolean MapOption_2_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MapOption_2_0_2")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, "sections"); if (!r) r = consumeToken(b, "SECTIONS"); exit_section_(b, m, null, r); return r; } // 'segments'|'SEGMENTS' private static boolean MapOption_2_0_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MapOption_2_0_3")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, "segments"); if (!r) r = consumeToken(b, "SEGMENTS"); exit_section_(b, m, null, r); return r; } // 'symbols'|'SYMBOLS' private static boolean MapOption_2_0_4(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MapOption_2_0_4")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, "symbols"); if (!r) r = consumeToken(b, "SYMBOLS"); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // Element* static boolean NASMFile(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "NASMFile")) return false; while (true) { int c = current_position_(b); if (!Element(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "NASMFile", c)) break; } return true; } /* ********************************************************** */ // OP_PREFIX NL* static boolean Prefix(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Prefix")) return false; if (!nextTokenIs(b, OP_PREFIX)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, OP_PREFIX); r = r && Prefix_1(b, l + 1); exit_section_(b, m, null, r); return r; } // NL* private static boolean Prefix_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Prefix_1")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Prefix_1", c)) break; } return true; } /* ********************************************************** */ // Include // | Define // | Assign // | Macro // | MacroDefCall // | MacroCall // | Strlen // | Error // | Conditional // | PreprocessorExpr public static boolean Preprocessor(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Preprocessor")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, PREPROCESSOR, "<preprocessor>"); r = Include(b, l + 1); if (!r) r = Define(b, l + 1); if (!r) r = Assign(b, l + 1); if (!r) r = Macro(b, l + 1); if (!r) r = MacroDefCall(b, l + 1); if (!r) r = MacroCall(b, l + 1); if (!r) r = Strlen(b, l + 1); if (!r) r = Error(b, l + 1); if (!r) r = Conditional(b, l + 1); if (!r) r = PreprocessorExpr(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } /* ********************************************************** */ // PREPROCESSOR_OP Expr* static boolean PreprocessorExpr(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "PreprocessorExpr")) return false; if (!nextTokenIs(b, PREPROCESSOR_OP)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, PREPROCESSOR_OP); r = r && PreprocessorExpr_1(b, l + 1); exit_section_(b, m, null, r); return r; } // Expr* private static boolean PreprocessorExpr_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "PreprocessorExpr_1")) return false; while (true) { int c = current_position_(b); if (!Expr(b, l + 1, -1)) break; if (!empty_element_parsed_guard_(b, "PreprocessorExpr_1", c)) break; } return true; } /* ********************************************************** */ // (SQUARE_L SECTION SQUARE_R) | SECTION static boolean Section(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Section")) return false; if (!nextTokenIs(b, "", SECTION, SQUARE_L)) return false; boolean r; Marker m = enter_section_(b); r = Section_0(b, l + 1); if (!r) r = consumeToken(b, SECTION); exit_section_(b, m, null, r); return r; } // SQUARE_L SECTION SQUARE_R private static boolean Section_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Section_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, SQUARE_L, SECTION, SQUARE_R); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // (SQUARE_L SEGMENT SQUARE_R) | SEGMENT static boolean Segment(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Segment")) return false; if (!nextTokenIs(b, "", SEGMENT, SQUARE_L)) return false; boolean r; Marker m = enter_section_(b); r = Segment_0(b, l + 1); if (!r) r = consumeToken(b, SEGMENT); exit_section_(b, m, null, r); return r; } // SQUARE_L SEGMENT SQUARE_R private static boolean Segment_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Segment_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokens(b, 0, SQUARE_L, SEGMENT, SQUARE_R); exit_section_(b, m, null, r); return r; } /* ********************************************************** */ // STRLEN_TAG Identifier (STRING|ID) NL* public static boolean Strlen(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Strlen")) return false; if (!nextTokenIs(b, STRLEN_TAG)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, STRLEN_TAG); r = r && Identifier(b, l + 1); r = r && Strlen_2(b, l + 1); r = r && Strlen_3(b, l + 1); exit_section_(b, m, STRLEN, r); return r; } // STRING|ID private static boolean Strlen_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Strlen_2")) return false; boolean r; r = consumeToken(b, STRING); if (!r) r = consumeToken(b, ID); return r; } // NL* private static boolean Strlen_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Strlen_3")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Strlen_3", c)) break; } return true; } /* ********************************************************** */ // STRUC_TAG Identifier NL* ((((LBL_DEF|LabelIdentifier) DATA_OP ((MINUS|PLUS)? (Expr|Identifier)))|(LabelIdentifier|LBL_DEF)|Conditional) NL*)* ENDSTRUC_TAG public static boolean Struc(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc")) return false; if (!nextTokenIs(b, STRUC_TAG)) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, STRUC_TAG); r = r && Identifier(b, l + 1); r = r && Struc_2(b, l + 1); r = r && Struc_3(b, l + 1); r = r && consumeToken(b, ENDSTRUC_TAG); exit_section_(b, m, STRUC, r); return r; } // NL* private static boolean Struc_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc_2")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Struc_2", c)) break; } return true; } // ((((LBL_DEF|LabelIdentifier) DATA_OP ((MINUS|PLUS)? (Expr|Identifier)))|(LabelIdentifier|LBL_DEF)|Conditional) NL*)* private static boolean Struc_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc_3")) return false; while (true) { int c = current_position_(b); if (!Struc_3_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "Struc_3", c)) break; } return true; } // (((LBL_DEF|LabelIdentifier) DATA_OP ((MINUS|PLUS)? (Expr|Identifier)))|(LabelIdentifier|LBL_DEF)|Conditional) NL* private static boolean Struc_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc_3_0")) return false; boolean r; Marker m = enter_section_(b); r = Struc_3_0_0(b, l + 1); r = r && Struc_3_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // ((LBL_DEF|LabelIdentifier) DATA_OP ((MINUS|PLUS)? (Expr|Identifier)))|(LabelIdentifier|LBL_DEF)|Conditional private static boolean Struc_3_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc_3_0_0")) return false; boolean r; Marker m = enter_section_(b); r = Struc_3_0_0_0(b, l + 1); if (!r) r = Struc_3_0_0_1(b, l + 1); if (!r) r = Conditional(b, l + 1); exit_section_(b, m, null, r); return r; } // (LBL_DEF|LabelIdentifier) DATA_OP ((MINUS|PLUS)? (Expr|Identifier)) private static boolean Struc_3_0_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc_3_0_0_0")) return false; boolean r; Marker m = enter_section_(b); r = Struc_3_0_0_0_0(b, l + 1); r = r && consumeToken(b, DATA_OP); r = r && Struc_3_0_0_0_2(b, l + 1); exit_section_(b, m, null, r); return r; } // LBL_DEF|LabelIdentifier private static boolean Struc_3_0_0_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc_3_0_0_0_0")) return false; boolean r; r = consumeToken(b, LBL_DEF); if (!r) r = LabelIdentifier(b, l + 1); return r; } // (MINUS|PLUS)? (Expr|Identifier) private static boolean Struc_3_0_0_0_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc_3_0_0_0_2")) return false; boolean r; Marker m = enter_section_(b); r = Struc_3_0_0_0_2_0(b, l + 1); r = r && Struc_3_0_0_0_2_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (MINUS|PLUS)? private static boolean Struc_3_0_0_0_2_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc_3_0_0_0_2_0")) return false; Struc_3_0_0_0_2_0_0(b, l + 1); return true; } // MINUS|PLUS private static boolean Struc_3_0_0_0_2_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc_3_0_0_0_2_0_0")) return false; boolean r; r = consumeToken(b, MINUS); if (!r) r = consumeToken(b, PLUS); return r; } // Expr|Identifier private static boolean Struc_3_0_0_0_2_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc_3_0_0_0_2_1")) return false; boolean r; r = Expr(b, l + 1, -1); if (!r) r = Identifier(b, l + 1); return r; } // LabelIdentifier|LBL_DEF private static boolean Struc_3_0_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc_3_0_0_1")) return false; boolean r; r = LabelIdentifier(b, l + 1); if (!r) r = consumeToken(b, LBL_DEF); return r; } // NL* private static boolean Struc_3_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Struc_3_0_1")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Struc_3_0_1", c)) break; } return true; } /* ********************************************************** */ // (Struc|IStruc) NL* public static boolean Structure(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Structure")) return false; if (!nextTokenIs(b, "<structure>", ISTRUC_TAG, STRUC_TAG)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, STRUCTURE, "<structure>"); r = Structure_0(b, l + 1); r = r && Structure_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // Struc|IStruc private static boolean Structure_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Structure_0")) return false; boolean r; r = Struc(b, l + 1); if (!r) r = IStruc(b, l + 1); return r; } // NL* private static boolean Structure_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Structure_1")) return false; while (true) { int c = current_position_(b); if (!consumeToken(b, NL)) break; if (!empty_element_parsed_guard_(b, "Structure_1", c)) break; } return true; } /* ********************************************************** */ // Expression root: Expr // Operator priority table: // 0: ATOM(ParenthesisExpr) // 1: BINARY(TokenConcatExpr) // 2: BINARY(MulExpr) // 3: BINARY(DivExpr) // 4: BINARY(PlusExpr) // 5: BINARY(MinusExpr) // 6: BINARY(ModulusExpr) // 7: BINARY(BitShiftLExpr) // 8: BINARY(BitShiftRExpr) // 9: BINARY(BitwiseANDExpr) // 10: BINARY(BitwiseORExpr) // 11: BINARY(BitwiseXORExpr) // 12: PREFIX(BitwiseNOTExpr) // 13: BINARY(LogicalANDExpr) // 14: BINARY(LogicalORExpr) // 15: BINARY(LogicalXORExpr) // 16: ATOM(NumericLiteral) // 17: ATOM(SegmentAddress) // 18: ATOM(Str) // 19: ATOM(StructureField) // 20: ATOM(MacroDefCall) // 21: ATOM(MacroCall) // 22: ATOM(MacroParamCounter) // 23: ATOM(MacroParamReference) // 24: ATOM(MacroVarReference) // 25: ATOM(Address) // 26: ATOM(Reg) // 27: ATOM(Seg) // 28: ATOM(Mnemonic) // 29: ATOM(Identifier) // 30: ATOM(LabelIdentifier) // 31: ATOM(EndDirective) public static boolean Expr(PsiBuilder b, int l, int g) { if (!recursion_guard_(b, l, "Expr")) return false; addVariant(b, "<expr>"); boolean r, p; Marker m = enter_section_(b, l, _NONE_, "<expr>"); r = ParenthesisExpr(b, l + 1); if (!r) r = BitwiseNOTExpr(b, l + 1); if (!r) r = NumericLiteral(b, l + 1); if (!r) r = SegmentAddress(b, l + 1); if (!r) r = Str(b, l + 1); if (!r) r = StructureField(b, l + 1); if (!r) r = MacroDefCall(b, l + 1); if (!r) r = MacroCall(b, l + 1); if (!r) r = MacroParamCounter(b, l + 1); if (!r) r = MacroParamReference(b, l + 1); if (!r) r = MacroVarReference(b, l + 1); if (!r) r = Address(b, l + 1); if (!r) r = Reg(b, l + 1); if (!r) r = Seg(b, l + 1); if (!r) r = Mnemonic(b, l + 1); if (!r) r = Identifier(b, l + 1); if (!r) r = LabelIdentifier(b, l + 1); if (!r) r = EndDirective(b, l + 1); p = r; r = r && Expr_0(b, l + 1, g); exit_section_(b, l, m, null, r, p, null); return r || p; } public static boolean Expr_0(PsiBuilder b, int l, int g) { if (!recursion_guard_(b, l, "Expr_0")) return false; boolean r = true; while (true) { Marker m = enter_section_(b, l, _LEFT_, null); if (g < 1 && consumeTokenSmart(b, TOKEN_CONCAT)) { r = Expr(b, l, 1); exit_section_(b, l, m, TOKEN_CONCAT_EXPR, r, true, null); } else if (g < 2 && consumeTokenSmart(b, TIMES)) { r = Expr(b, l, 2); exit_section_(b, l, m, MUL_EXPR, r, true, null); } else if (g < 3 && consumeTokenSmart(b, DIVIDE)) { r = Expr(b, l, 3); exit_section_(b, l, m, DIV_EXPR, r, true, null); } else if (g < 4 && consumeTokenSmart(b, PLUS)) { r = Expr(b, l, 4); exit_section_(b, l, m, PLUS_EXPR, r, true, null); } else if (g < 5 && consumeTokenSmart(b, MINUS)) { r = Expr(b, l, 5); exit_section_(b, l, m, MINUS_EXPR, r, true, null); } else if (g < 6 && consumeTokenSmart(b, PERCENT)) { r = Expr(b, l, 6); exit_section_(b, l, m, MODULUS_EXPR, r, true, null); } else if (g < 7 && consumeTokenSmart(b, BITSHIFT_L)) { r = Expr(b, l, 7); exit_section_(b, l, m, BIT_SHIFT_L_EXPR, r, true, null); } else if (g < 8 && consumeTokenSmart(b, BITSHIFT_R)) { r = Expr(b, l, 8); exit_section_(b, l, m, BIT_SHIFT_R_EXPR, r, true, null); } else if (g < 9 && consumeTokenSmart(b, BITWISE_AND)) { r = Expr(b, l, 9); exit_section_(b, l, m, BITWISE_AND_EXPR, r, true, null); } else if (g < 10 && consumeTokenSmart(b, BITWISE_OR)) { r = Expr(b, l, 10); exit_section_(b, l, m, BITWISE_OR_EXPR, r, true, null); } else if (g < 11 && consumeTokenSmart(b, BITWISE_XOR)) { r = Expr(b, l, 11); exit_section_(b, l, m, BITWISE_XOR_EXPR, r, true, null); } else if (g < 13 && consumeTokenSmart(b, LOGICAL_AND)) { r = Expr(b, l, 13); exit_section_(b, l, m, LOGICAL_AND_EXPR, r, true, null); } else if (g < 14 && consumeTokenSmart(b, LOGICAL_OR)) { r = Expr(b, l, 14); exit_section_(b, l, m, LOGICAL_OR_EXPR, r, true, null); } else if (g < 15 && consumeTokenSmart(b, LOGICAL_XOR)) { r = Expr(b, l, 15); exit_section_(b, l, m, LOGICAL_XOR_EXPR, r, true, null); } else { exit_section_(b, l, m, null, false, false, null); break; } } return r; } // ROUND_L Expr ROUND_R public static boolean ParenthesisExpr(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "ParenthesisExpr")) return false; if (!nextTokenIsSmart(b, ROUND_L)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, PARENTHESIS_EXPR, null); r = consumeTokenSmart(b, ROUND_L); p = r; // pin = 1 r = r && report_error_(b, Expr(b, l + 1, -1)); r = p && consumeToken(b, ROUND_R) && r; exit_section_(b, l, m, r, p, null); return r || p; } public static boolean BitwiseNOTExpr(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "BitwiseNOTExpr")) return false; if (!nextTokenIsSmart(b, BITWISE_NOT)) return false; boolean r, p; Marker m = enter_section_(b, l, _NONE_, null); r = consumeTokenSmart(b, BITWISE_NOT); p = r; r = p && Expr(b, l, 12); exit_section_(b, l, m, BITWISE_NOT_EXPR, r, p, null); return r || p; } // SIZE_TYPE? (BITWISE_NOT|MINUS|PLUS)? (BINARY|ZEROES|HEXADECIMAL|DECIMAL|FLOAT_DECIMAL|CHARACTER) public static boolean NumericLiteral(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "NumericLiteral")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, NUMERIC_LITERAL, "<numeric literal>"); r = NumericLiteral_0(b, l + 1); r = r && NumericLiteral_1(b, l + 1); r = r && NumericLiteral_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // SIZE_TYPE? private static boolean NumericLiteral_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "NumericLiteral_0")) return false; consumeTokenSmart(b, SIZE_TYPE); return true; } // (BITWISE_NOT|MINUS|PLUS)? private static boolean NumericLiteral_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "NumericLiteral_1")) return false; NumericLiteral_1_0(b, l + 1); return true; } // BITWISE_NOT|MINUS|PLUS private static boolean NumericLiteral_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "NumericLiteral_1_0")) return false; boolean r; r = consumeTokenSmart(b, BITWISE_NOT); if (!r) r = consumeTokenSmart(b, MINUS); if (!r) r = consumeTokenSmart(b, PLUS); return r; } // BINARY|ZEROES|HEXADECIMAL|DECIMAL|FLOAT_DECIMAL|CHARACTER private static boolean NumericLiteral_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "NumericLiteral_2")) return false; boolean r; r = consumeTokenSmart(b, BINARY); if (!r) r = consumeTokenSmart(b, ZEROES); if (!r) r = consumeTokenSmart(b, HEXADECIMAL); if (!r) r = consumeTokenSmart(b, DECIMAL); if (!r) r = consumeTokenSmart(b, FLOAT_DECIMAL); if (!r) r = consumeTokenSmart(b, CHARACTER); return r; } // SIZE_TYPE? ((SEGMENT_ADDR_L (HEXADECIMAL|ZEROES|MacroCall|ID|LBL))| // (LBL_DEF (SIZE_TYPE? (HEXADECIMAL|ZEROES|MacroCall|ID|LBL)))| // (LabelDefMacro (SIZE_TYPE? (HEXADECIMAL|ZEROES|MacroCall|ID|LBL)))) public static boolean SegmentAddress(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress")) return false; boolean r; Marker m = enter_section_(b, l, _COLLAPSE_, SEGMENT_ADDRESS, "<segment address>"); r = SegmentAddress_0(b, l + 1); r = r && SegmentAddress_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // SIZE_TYPE? private static boolean SegmentAddress_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress_0")) return false; consumeTokenSmart(b, SIZE_TYPE); return true; } // (SEGMENT_ADDR_L (HEXADECIMAL|ZEROES|MacroCall|ID|LBL))| // (LBL_DEF (SIZE_TYPE? (HEXADECIMAL|ZEROES|MacroCall|ID|LBL)))| // (LabelDefMacro (SIZE_TYPE? (HEXADECIMAL|ZEROES|MacroCall|ID|LBL))) private static boolean SegmentAddress_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress_1")) return false; boolean r; Marker m = enter_section_(b); r = SegmentAddress_1_0(b, l + 1); if (!r) r = SegmentAddress_1_1(b, l + 1); if (!r) r = SegmentAddress_1_2(b, l + 1); exit_section_(b, m, null, r); return r; } // SEGMENT_ADDR_L (HEXADECIMAL|ZEROES|MacroCall|ID|LBL) private static boolean SegmentAddress_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress_1_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, SEGMENT_ADDR_L); r = r && SegmentAddress_1_0_1(b, l + 1); exit_section_(b, m, null, r); return r; } // HEXADECIMAL|ZEROES|MacroCall|ID|LBL private static boolean SegmentAddress_1_0_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress_1_0_1")) return false; boolean r; r = consumeTokenSmart(b, HEXADECIMAL); if (!r) r = consumeTokenSmart(b, ZEROES); if (!r) r = MacroCall(b, l + 1); if (!r) r = consumeTokenSmart(b, ID); if (!r) r = consumeTokenSmart(b, LBL); return r; } // LBL_DEF (SIZE_TYPE? (HEXADECIMAL|ZEROES|MacroCall|ID|LBL)) private static boolean SegmentAddress_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress_1_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, LBL_DEF); r = r && SegmentAddress_1_1_1(b, l + 1); exit_section_(b, m, null, r); return r; } // SIZE_TYPE? (HEXADECIMAL|ZEROES|MacroCall|ID|LBL) private static boolean SegmentAddress_1_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress_1_1_1")) return false; boolean r; Marker m = enter_section_(b); r = SegmentAddress_1_1_1_0(b, l + 1); r = r && SegmentAddress_1_1_1_1(b, l + 1); exit_section_(b, m, null, r); return r; } // SIZE_TYPE? private static boolean SegmentAddress_1_1_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress_1_1_1_0")) return false; consumeTokenSmart(b, SIZE_TYPE); return true; } // HEXADECIMAL|ZEROES|MacroCall|ID|LBL private static boolean SegmentAddress_1_1_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress_1_1_1_1")) return false; boolean r; r = consumeTokenSmart(b, HEXADECIMAL); if (!r) r = consumeTokenSmart(b, ZEROES); if (!r) r = MacroCall(b, l + 1); if (!r) r = consumeTokenSmart(b, ID); if (!r) r = consumeTokenSmart(b, LBL); return r; } // LabelDefMacro (SIZE_TYPE? (HEXADECIMAL|ZEROES|MacroCall|ID|LBL)) private static boolean SegmentAddress_1_2(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress_1_2")) return false; boolean r; Marker m = enter_section_(b); r = LabelDefMacro(b, l + 1); r = r && SegmentAddress_1_2_1(b, l + 1); exit_section_(b, m, null, r); return r; } // SIZE_TYPE? (HEXADECIMAL|ZEROES|MacroCall|ID|LBL) private static boolean SegmentAddress_1_2_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress_1_2_1")) return false; boolean r; Marker m = enter_section_(b); r = SegmentAddress_1_2_1_0(b, l + 1); r = r && SegmentAddress_1_2_1_1(b, l + 1); exit_section_(b, m, null, r); return r; } // SIZE_TYPE? private static boolean SegmentAddress_1_2_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress_1_2_1_0")) return false; consumeTokenSmart(b, SIZE_TYPE); return true; } // HEXADECIMAL|ZEROES|MacroCall|ID|LBL private static boolean SegmentAddress_1_2_1_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "SegmentAddress_1_2_1_1")) return false; boolean r; r = consumeTokenSmart(b, HEXADECIMAL); if (!r) r = consumeTokenSmart(b, ZEROES); if (!r) r = MacroCall(b, l + 1); if (!r) r = consumeTokenSmart(b, ID); if (!r) r = consumeTokenSmart(b, LBL); return r; } // STRING public static boolean Str(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Str")) return false; if (!nextTokenIsSmart(b, STRING)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, STRING); exit_section_(b, m, STR, r); return r; } // ID_EXTENSION public static boolean StructureField(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "StructureField")) return false; if (!nextTokenIsSmart(b, ID_EXTENSION)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, ID_EXTENSION); exit_section_(b, m, STRUCTURE_FIELD, r); return r; } // SIZE_TYPE? (BITWISE_NOT|MINUS|PLUS)? Identifier MacroParenthesis public static boolean MacroDefCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroDefCall")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, MACRO_DEF_CALL, "<macro def call>"); r = MacroDefCall_0(b, l + 1); r = r && MacroDefCall_1(b, l + 1); r = r && Identifier(b, l + 1); r = r && MacroParenthesis(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // SIZE_TYPE? private static boolean MacroDefCall_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroDefCall_0")) return false; consumeTokenSmart(b, SIZE_TYPE); return true; } // (BITWISE_NOT|MINUS|PLUS)? private static boolean MacroDefCall_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroDefCall_1")) return false; MacroDefCall_1_0(b, l + 1); return true; } // BITWISE_NOT|MINUS|PLUS private static boolean MacroDefCall_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroDefCall_1_0")) return false; boolean r; r = consumeTokenSmart(b, BITWISE_NOT); if (!r) r = consumeTokenSmart(b, MINUS); if (!r) r = consumeTokenSmart(b, PLUS); return r; } // SIZE_TYPE? Identifier Expr (SEPARATOR Expr)* public static boolean MacroCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroCall")) return false; boolean r; Marker m = enter_section_(b, l, _COLLAPSE_, MACRO_CALL, "<macro call>"); r = MacroCall_0(b, l + 1); r = r && Identifier(b, l + 1); r = r && Expr(b, l + 1, -1); r = r && MacroCall_3(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // SIZE_TYPE? private static boolean MacroCall_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroCall_0")) return false; consumeTokenSmart(b, SIZE_TYPE); return true; } // (SEPARATOR Expr)* private static boolean MacroCall_3(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroCall_3")) return false; while (true) { int c = current_position_(b); if (!MacroCall_3_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "MacroCall_3", c)) break; } return true; } // SEPARATOR Expr private static boolean MacroCall_3_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroCall_3_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, SEPARATOR); r = r && Expr(b, l + 1, -1); exit_section_(b, m, null, r); return r; } // SIZE_TYPE? MACRO_PARAM_COUNT public static boolean MacroParamCounter(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParamCounter")) return false; if (!nextTokenIsSmart(b, MACRO_PARAM_COUNT, SIZE_TYPE)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, MACRO_PARAM_COUNTER, "<macro param counter>"); r = MacroParamCounter_0(b, l + 1); r = r && consumeToken(b, MACRO_PARAM_COUNT); exit_section_(b, l, m, r, false, null); return r; } // SIZE_TYPE? private static boolean MacroParamCounter_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParamCounter_0")) return false; consumeTokenSmart(b, SIZE_TYPE); return true; } // SIZE_TYPE? MACRO_PARAM_REF public static boolean MacroParamReference(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParamReference")) return false; if (!nextTokenIsSmart(b, MACRO_PARAM_REF, SIZE_TYPE)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, MACRO_PARAM_REFERENCE, "<macro param reference>"); r = MacroParamReference_0(b, l + 1); r = r && consumeToken(b, MACRO_PARAM_REF); exit_section_(b, l, m, r, false, null); return r; } // SIZE_TYPE? private static boolean MacroParamReference_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroParamReference_0")) return false; consumeTokenSmart(b, SIZE_TYPE); return true; } // SIZE_TYPE? MACRO_VAR_REF public static boolean MacroVarReference(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroVarReference")) return false; if (!nextTokenIsSmart(b, MACRO_VAR_REF, SIZE_TYPE)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, MACRO_VAR_REFERENCE, "<macro var reference>"); r = MacroVarReference_0(b, l + 1); r = r && consumeToken(b, MACRO_VAR_REF); exit_section_(b, l, m, r, false, null); return r; } // SIZE_TYPE? private static boolean MacroVarReference_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "MacroVarReference_0")) return false; consumeTokenSmart(b, SIZE_TYPE); return true; } // (SIZE_TYPE? AddressInternal)|DOLLARSIGN|DOLLARSIGN2 public static boolean Address(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Address")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, ADDRESS, "<address>"); r = Address_0(b, l + 1); if (!r) r = consumeTokenSmart(b, DOLLARSIGN); if (!r) r = consumeTokenSmart(b, DOLLARSIGN2); exit_section_(b, l, m, r, false, null); return r; } // SIZE_TYPE? AddressInternal private static boolean Address_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Address_0")) return false; boolean r; Marker m = enter_section_(b); r = Address_0_0(b, l + 1); r = r && AddressInternal(b, l + 1); exit_section_(b, m, null, r); return r; } // SIZE_TYPE? private static boolean Address_0_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Address_0_0")) return false; consumeTokenSmart(b, SIZE_TYPE); return true; } // SIZE_TYPE? REGISTER public static boolean Reg(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Reg")) return false; if (!nextTokenIsSmart(b, REGISTER, SIZE_TYPE)) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, REG, "<reg>"); r = Reg_0(b, l + 1); r = r && consumeToken(b, REGISTER); exit_section_(b, l, m, r, false, null); return r; } // SIZE_TYPE? private static boolean Reg_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Reg_0")) return false; consumeTokenSmart(b, SIZE_TYPE); return true; } // SEGMENT_REGISTER public static boolean Seg(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Seg")) return false; if (!nextTokenIsSmart(b, SEGMENT_REGISTER)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, SEGMENT_REGISTER); exit_section_(b, m, SEG, r); return r; } // GENERAL_OP|SYSTEM_OP|VIRTUALIZATION_OP|X64_OP|FPU_OP|MMX_OP|SSE_OP|SSE2_OP|SSE3_OP|SSE4_OP|AVX_OP|AVX2_OP|AVX512_OP public static boolean Mnemonic(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Mnemonic")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, MNEMONIC, "<mnemonic>"); r = consumeTokenSmart(b, GENERAL_OP); if (!r) r = consumeTokenSmart(b, SYSTEM_OP); if (!r) r = consumeTokenSmart(b, VIRTUALIZATION_OP); if (!r) r = consumeTokenSmart(b, X64_OP); if (!r) r = consumeTokenSmart(b, FPU_OP); if (!r) r = consumeTokenSmart(b, MMX_OP); if (!r) r = consumeTokenSmart(b, SSE_OP); if (!r) r = consumeTokenSmart(b, SSE2_OP); if (!r) r = consumeTokenSmart(b, SSE3_OP); if (!r) r = consumeTokenSmart(b, SSE4_OP); if (!r) r = consumeTokenSmart(b, AVX_OP); if (!r) r = consumeTokenSmart(b, AVX2_OP); if (!r) r = consumeTokenSmart(b, AVX512_OP); exit_section_(b, l, m, r, false, null); return r; } // ID|MACRO_VAR_REF|MACRO_PARAM_REF public static boolean Identifier(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "Identifier")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, IDENTIFIER, "<identifier>"); r = consumeTokenSmart(b, ID); if (!r) r = consumeTokenSmart(b, MACRO_VAR_REF); if (!r) r = consumeTokenSmart(b, MACRO_PARAM_REF); exit_section_(b, l, m, r, false, null); return r; } // SIZE_TYPE? (LBL|ID) public static boolean LabelIdentifier(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "LabelIdentifier")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, LABEL_IDENTIFIER, "<label identifier>"); r = LabelIdentifier_0(b, l + 1); r = r && LabelIdentifier_1(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // SIZE_TYPE? private static boolean LabelIdentifier_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "LabelIdentifier_0")) return false; consumeTokenSmart(b, SIZE_TYPE); return true; } // LBL|ID private static boolean LabelIdentifier_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "LabelIdentifier_1")) return false; boolean r; r = consumeTokenSmart(b, LBL); if (!r) r = consumeTokenSmart(b, ID); return r; } // END_DIRECTIVE_OP public static boolean EndDirective(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "EndDirective")) return false; if (!nextTokenIsSmart(b, END_DIRECTIVE_OP)) return false; boolean r; Marker m = enter_section_(b); r = consumeTokenSmart(b, END_DIRECTIVE_OP); exit_section_(b, m, END_DIRECTIVE, r); return r; } }