// ---- FooParser.java -----------------
//header.txt
package test;
import com.intellij.lang.PsiBuilder;
import com.intellij.lang.PsiBuilder.Marker;
import static test.FooTypes.*;
import static org.intellij.grammar.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 FooParser implements PsiParser, LightPsiParser {
public ASTNode parse(IElementType root_, PsiBuilder builder_) {
parseLight(root_, builder_);
return builder_.getTreeBuilt();
}
public void parseLight(IElementType root_, PsiBuilder builder_) {
boolean result_;
builder_ = adapt_builder_(root_, builder_, this, EXTENDS_SETS_);
Marker marker_ = enter_section_(builder_, 0, _COLLAPSE_, null);
if (root_ == ELEMENT_1) {
result_ = element1(builder_, 0);
}
else if (root_ == ELEMENT_2) {
result_ = element2(builder_, 0);
}
else if (root_ == ELEMENT_3) {
result_ = element3(builder_, 0);
}
else if (root_ == ELEMENT_4) {
result_ = element4(builder_, 0);
}
else if (root_ == ELEMENT_5) {
result_ = element5(builder_, 0);
}
else if (root_ == INTERFACE_TYPE) {
result_ = interface_type(builder_, 0);
}
else if (root_ == STRUCT_TYPE) {
result_ = struct_type(builder_, 0);
}
else if (root_ == TYPE) {
result_ = type(builder_, 0);
}
else {
result_ = parse_root_(root_, builder_, 0);
}
exit_section_(builder_, 0, marker_, root_, result_, true, TRUE_CONDITION);
}
protected boolean parse_root_(IElementType root_, PsiBuilder builder_, int level_) {
return root(builder_, level_ + 1);
}
public static final TokenSet[] EXTENDS_SETS_ = new TokenSet[] {
create_token_set_(INTERFACE_TYPE, STRUCT_TYPE, TYPE),
};
/* ********************************************************** */
// 'aa' element5
public static boolean element1(PsiBuilder builder_, int level_) {
if (!recursion_guard_(builder_, level_, "element1")) return false;
boolean result_;
Marker marker_ = enter_section_(builder_, level_, _NONE_, ELEMENT_1, "<element 1>");
result_ = consumeToken(builder_, "aa");
result_ = result_ && element5(builder_, level_ + 1);
exit_section_(builder_, level_, marker_, result_, false, null);
return result_;
}
/* ********************************************************** */
// 'bb' element4*
public static boolean element2(PsiBuilder builder_, int level_) {
if (!recursion_guard_(builder_, level_, "element2")) return false;
boolean result_;
Marker marker_ = enter_section_(builder_, level_, _NONE_, ELEMENT_2, "<element 2>");
result_ = consumeToken(builder_, "bb");
result_ = result_ && element2_1(builder_, level_ + 1);
exit_section_(builder_, level_, marker_, result_, false, null);
return result_;
}
// element4*
private static boolean element2_1(PsiBuilder builder_, int level_) {
if (!recursion_guard_(builder_, level_, "element2_1")) return false;
int pos_ = current_position_(builder_);
while (true) {
if (!element4(builder_, level_ + 1)) break;
if (!empty_element_parsed_guard_(builder_, "element2_1", pos_)) break;
pos_ = current_position_(builder_);
}
return true;
}
/* ********************************************************** */
// 'bb' element4
public static boolean element3(PsiBuilder builder_, int level_) {
if (!recursion_guard_(builder_, level_, "element3")) return false;
boolean result_;
Marker marker_ = enter_section_(builder_, level_, _NONE_, ELEMENT_3, "<element 3>");
result_ = consumeToken(builder_, "bb");
result_ = result_ && element4(builder_, level_ + 1);
exit_section_(builder_, level_, marker_, result_, false, null);
return result_;
}
/* ********************************************************** */
// 'bb' | element2
public static boolean element4(PsiBuilder builder_, int level_) {
if (!recursion_guard_(builder_, level_, "element4")) return false;
boolean result_;
Marker marker_ = enter_section_(builder_, level_, _NONE_, ELEMENT_4, "<element 4>");
result_ = consumeToken(builder_, "bb");
if (!result_) result_ = element2(builder_, level_ + 1);
exit_section_(builder_, level_, marker_, result_, false, null);
return result_;
}
/* ********************************************************** */
// 'cc'
public static boolean element5(PsiBuilder builder_, int level_) {
if (!recursion_guard_(builder_, level_, "element5")) return false;
boolean result_;
Marker marker_ = enter_section_(builder_, level_, _NONE_, ELEMENT_5, "<element 5>");
result_ = consumeToken(builder_, "cc");
exit_section_(builder_, level_, marker_, result_, false, null);
return result_;
}
/* ********************************************************** */
// 'interface'
public static boolean interface_type(PsiBuilder builder_, int level_) {
if (!recursion_guard_(builder_, level_, "interface_type")) return false;
boolean result_;
Marker marker_ = enter_section_(builder_, level_, _NONE_, INTERFACE_TYPE, "<interface type>");
result_ = consumeToken(builder_, "interface");
exit_section_(builder_, level_, marker_, result_, false, null);
return result_;
}
/* ********************************************************** */
// element1 | element2 | element3 | element4 | element5 | type
static boolean root(PsiBuilder builder_, int level_) {
if (!recursion_guard_(builder_, level_, "root")) return false;
boolean result_;
Marker marker_ = enter_section_(builder_);
result_ = element1(builder_, level_ + 1);
if (!result_) result_ = element2(builder_, level_ + 1);
if (!result_) result_ = element3(builder_, level_ + 1);
if (!result_) result_ = element4(builder_, level_ + 1);
if (!result_) result_ = element5(builder_, level_ + 1);
if (!result_) result_ = type(builder_, level_ + 1);
exit_section_(builder_, marker_, null, result_);
return result_;
}
/* ********************************************************** */
// 'struct'
public static boolean struct_type(PsiBuilder builder_, int level_) {
if (!recursion_guard_(builder_, level_, "struct_type")) return false;
boolean result_;
Marker marker_ = enter_section_(builder_, level_, _NONE_, STRUCT_TYPE, "<struct type>");
result_ = consumeToken(builder_, "struct");
exit_section_(builder_, level_, marker_, result_, false, null);
return result_;
}
/* ********************************************************** */
// interface_type | struct_type
public static boolean type(PsiBuilder builder_, int level_) {
if (!recursion_guard_(builder_, level_, "type")) return false;
boolean result_;
Marker marker_ = enter_section_(builder_, level_, _COLLAPSE_, TYPE, "<type>");
result_ = interface_type(builder_, level_ + 1);
if (!result_) result_ = struct_type(builder_, level_ + 1);
exit_section_(builder_, level_, marker_, result_, false, null);
return result_;
}
}