// This is a generated file. Not intended for manual editing.
package com.plan9.intel.lang.core.parser;
import com.intellij.lang.PsiBuilder;
import com.intellij.lang.PsiBuilder.Marker;
import static com.plan9.intel.lang.core.psi.AsmIntelTypes.*;
import static com.intellij.lang.parser.GeneratedParserUtilBase.*;
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 AsmIntelParser 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, null);
Marker m = enter_section_(b, 0, _COLLAPSE_, null);
if (t == FRAME_SIZE) {
r = FrameSize(b, 0);
}
else if (t == FUNCTION) {
r = Function(b, 0);
}
else if (t == FUNCTION_BODY) {
r = FunctionBody(b, 0);
}
else if (t == FUNCTION_FLAGS) {
r = FunctionFlags(b, 0);
}
else if (t == FUNCTION_HEADER) {
r = FunctionHeader(b, 0);
}
else if (t == INSTRUCTION_STMT) {
r = InstructionStmt(b, 0);
}
else if (t == LITERAL) {
r = Literal(b, 0);
}
else if (t == OPERANDS) {
r = Operands(b, 0);
}
else if (t == PREPROCESSOR_DIRECTIVE) {
r = PreprocessorDirective(b, 0);
}
else if (t == STATEMENT) {
r = Statement(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 File(b, l + 1);
}
/* ********************************************************** */
// Statement*
static boolean File(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "File")) return false;
int c = current_position_(b);
while (true) {
if (!Statement(b, l + 1)) break;
if (!empty_element_parsed_guard_(b, "File", c)) break;
c = current_position_(b);
}
return true;
}
/* ********************************************************** */
// '$' Literal ['-' Literal]
public static boolean FrameSize(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "FrameSize")) return false;
boolean r;
Marker m = enter_section_(b, l, _NONE_, FRAME_SIZE, "<frame size>");
r = consumeToken(b, "$");
r = r && Literal(b, l + 1);
r = r && FrameSize_2(b, l + 1);
exit_section_(b, l, m, r, false, null);
return r;
}
// ['-' Literal]
private static boolean FrameSize_2(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "FrameSize_2")) return false;
FrameSize_2_0(b, l + 1);
return true;
}
// '-' Literal
private static boolean FrameSize_2_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "FrameSize_2_0")) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeToken(b, "-");
r = r && Literal(b, l + 1);
exit_section_(b, m, null, r);
return r;
}
/* ********************************************************** */
// FunctionHeader FunctionBody
public static boolean Function(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "Function")) return false;
if (!nextTokenIs(b, TEXT)) return false;
boolean r;
Marker m = enter_section_(b);
r = FunctionHeader(b, l + 1);
r = r && FunctionBody(b, l + 1);
exit_section_(b, m, FUNCTION, r);
return r;
}
/* ********************************************************** */
// ( InstructionStmt | LABEL )*
public static boolean FunctionBody(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "FunctionBody")) return false;
Marker m = enter_section_(b, l, _NONE_, FUNCTION_BODY, "<function body>");
int c = current_position_(b);
while (true) {
if (!FunctionBody_0(b, l + 1)) break;
if (!empty_element_parsed_guard_(b, "FunctionBody", c)) break;
c = current_position_(b);
}
exit_section_(b, l, m, true, false, null);
return true;
}
// InstructionStmt | LABEL
private static boolean FunctionBody_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "FunctionBody_0")) return false;
boolean r;
Marker m = enter_section_(b);
r = InstructionStmt(b, l + 1);
if (!r) r = consumeToken(b, LABEL);
exit_section_(b, m, null, r);
return r;
}
/* ********************************************************** */
// FLAG | '(' FLAG ( '|' FLAG )* ')'
public static boolean FunctionFlags(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "FunctionFlags")) return false;
if (!nextTokenIs(b, "<function flags>", LPAREN, FLAG)) return false;
boolean r;
Marker m = enter_section_(b, l, _NONE_, FUNCTION_FLAGS, "<function flags>");
r = consumeToken(b, FLAG);
if (!r) r = FunctionFlags_1(b, l + 1);
exit_section_(b, l, m, r, false, null);
return r;
}
// '(' FLAG ( '|' FLAG )* ')'
private static boolean FunctionFlags_1(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "FunctionFlags_1")) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeToken(b, LPAREN);
r = r && consumeToken(b, FLAG);
r = r && FunctionFlags_1_2(b, l + 1);
r = r && consumeToken(b, RPAREN);
exit_section_(b, m, null, r);
return r;
}
// ( '|' FLAG )*
private static boolean FunctionFlags_1_2(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "FunctionFlags_1_2")) return false;
int c = current_position_(b);
while (true) {
if (!FunctionFlags_1_2_0(b, l + 1)) break;
if (!empty_element_parsed_guard_(b, "FunctionFlags_1_2", c)) break;
c = current_position_(b);
}
return true;
}
// '|' FLAG
private static boolean FunctionFlags_1_2_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "FunctionFlags_1_2_0")) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeToken(b, BIT_OR);
r = r && consumeToken(b, FLAG);
exit_section_(b, m, null, r);
return r;
}
/* ********************************************************** */
// TEXT identifier '(' PSEUDO_REG ')' ',' FunctionFlags [',' FrameSize]
public static boolean FunctionHeader(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "FunctionHeader")) return false;
if (!nextTokenIs(b, TEXT)) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeTokens(b, 0, TEXT, IDENTIFIER);
r = r && consumeToken(b, LPAREN);
r = r && consumeToken(b, PSEUDO_REG);
r = r && consumeToken(b, RPAREN);
r = r && consumeToken(b, COMMA);
r = r && FunctionFlags(b, l + 1);
r = r && FunctionHeader_7(b, l + 1);
exit_section_(b, m, FUNCTION_HEADER, r);
return r;
}
// [',' FrameSize]
private static boolean FunctionHeader_7(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "FunctionHeader_7")) return false;
FunctionHeader_7_0(b, l + 1);
return true;
}
// ',' FrameSize
private static boolean FunctionHeader_7_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "FunctionHeader_7_0")) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeToken(b, COMMA);
r = r && FrameSize(b, l + 1);
exit_section_(b, m, null, r);
return r;
}
/* ********************************************************** */
// INSTRUCTION Operands
public static boolean InstructionStmt(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "InstructionStmt")) return false;
if (!nextTokenIs(b, INSTRUCTION)) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeToken(b, INSTRUCTION);
r = r && Operands(b, l + 1);
exit_section_(b, m, INSTRUCTION_STMT, r);
return r;
}
/* ********************************************************** */
// int | hex
public static boolean Literal(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "Literal")) return false;
if (!nextTokenIs(b, "<literal>", HEX, INT)) return false;
boolean r;
Marker m = enter_section_(b, l, _NONE_, LITERAL, "<literal>");
r = consumeToken(b, INT);
if (!r) r = consumeToken(b, HEX);
exit_section_(b, l, m, r, false, null);
return r;
}
/* ********************************************************** */
public static boolean Operands(PsiBuilder b, int l) {
Marker m = enter_section_(b);
exit_section_(b, m, OPERANDS, true);
return true;
}
/* ********************************************************** */
// import STRING
public static boolean PreprocessorDirective(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "PreprocessorDirective")) return false;
if (!nextTokenIs(b, IMPORT)) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeTokens(b, 0, IMPORT, STRING);
exit_section_(b, m, PREPROCESSOR_DIRECTIVE, r);
return r;
}
/* ********************************************************** */
// PreprocessorDirective | Function
public static boolean Statement(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "Statement")) return false;
if (!nextTokenIs(b, "<statement>", TEXT, IMPORT)) return false;
boolean r;
Marker m = enter_section_(b, l, _NONE_, STATEMENT, "<statement>");
r = PreprocessorDirective(b, l + 1);
if (!r) r = Function(b, l + 1);
exit_section_(b, l, m, r, false, null);
return r;
}
}