mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-28 01:07:49 +08:00
144 lines
4.8 KiB
Java
144 lines
4.8 KiB
Java
// This is a generated file. Not intended for manual editing.
|
|
package com.simpleplugin.parser;
|
|
|
|
import org.jetbrains.annotations.*;
|
|
import com.intellij.lang.LighterASTNode;
|
|
import com.intellij.lang.PsiBuilder;
|
|
import com.intellij.lang.PsiBuilder.Marker;
|
|
import com.intellij.openapi.diagnostic.Logger;
|
|
import static com.simpleplugin.psi.SimpleTypes.*;
|
|
import static com.simpleplugin.parser.GeneratedParserUtilBase.*;
|
|
import com.intellij.psi.tree.IElementType;
|
|
import com.intellij.lang.ASTNode;
|
|
import com.intellij.psi.tree.TokenSet;
|
|
import com.intellij.lang.PsiParser;
|
|
|
|
@SuppressWarnings({"SimplifiableIfStatement", "UnusedAssignment"})
|
|
public class SimpleParser implements PsiParser {
|
|
|
|
public static Logger LOG_ = Logger.getInstance("com.simpleplugin.parser.SimpleParser");
|
|
|
|
@NotNull
|
|
public ASTNode parse(IElementType root_, PsiBuilder builder_) {
|
|
int level_ = 0;
|
|
boolean result_;
|
|
builder_ = adapt_builder_(root_, builder_, this);
|
|
if (root_ == PROPERTY) {
|
|
result_ = property(builder_, level_ + 1);
|
|
}
|
|
else {
|
|
Marker marker_ = builder_.mark();
|
|
result_ = parse_root_(root_, builder_, level_);
|
|
while (builder_.getTokenType() != null) {
|
|
builder_.advanceLexer();
|
|
}
|
|
marker_.done(root_);
|
|
}
|
|
return builder_.getTreeBuilt();
|
|
}
|
|
|
|
protected boolean parse_root_(final IElementType root_, final PsiBuilder builder_, final int level_) {
|
|
return simpleFile(builder_, level_ + 1);
|
|
}
|
|
|
|
/* ********************************************************** */
|
|
// (property|COMMENT|CRLF)
|
|
static boolean item_(PsiBuilder builder_, int level_) {
|
|
if (!recursion_guard_(builder_, level_, "item_")) return false;
|
|
return item__0(builder_, level_ + 1);
|
|
}
|
|
|
|
// property|COMMENT|CRLF
|
|
private static boolean item__0(PsiBuilder builder_, int level_) {
|
|
if (!recursion_guard_(builder_, level_, "item__0")) return false;
|
|
boolean result_ = false;
|
|
Marker marker_ = builder_.mark();
|
|
result_ = property(builder_, level_ + 1);
|
|
if (!result_) result_ = consumeToken(builder_, COMMENT);
|
|
if (!result_) result_ = consumeToken(builder_, CRLF);
|
|
if (!result_) {
|
|
marker_.rollbackTo();
|
|
}
|
|
else {
|
|
marker_.drop();
|
|
}
|
|
return result_;
|
|
}
|
|
|
|
/* ********************************************************** */
|
|
// (KEY? SEPARATOR VALUE?) | KEY
|
|
public static boolean property(PsiBuilder builder_, int level_) {
|
|
if (!recursion_guard_(builder_, level_, "property")) return false;
|
|
if (!nextTokenIs(builder_, KEY) && !nextTokenIs(builder_, SEPARATOR)
|
|
&& replaceVariants(builder_, 2, "<property>")) return false;
|
|
boolean result_ = false;
|
|
Marker marker_ = builder_.mark();
|
|
enterErrorRecordingSection(builder_, level_, _SECTION_GENERAL_, "<property>");
|
|
result_ = property_0(builder_, level_ + 1);
|
|
if (!result_) result_ = consumeToken(builder_, KEY);
|
|
if (result_) {
|
|
marker_.done(PROPERTY);
|
|
}
|
|
else {
|
|
marker_.rollbackTo();
|
|
}
|
|
result_ = exitErrorRecordingSection(builder_, level_, result_, false, _SECTION_GENERAL_, null);
|
|
return result_;
|
|
}
|
|
|
|
// (KEY? SEPARATOR VALUE?)
|
|
private static boolean property_0(PsiBuilder builder_, int level_) {
|
|
if (!recursion_guard_(builder_, level_, "property_0")) return false;
|
|
return property_0_0(builder_, level_ + 1);
|
|
}
|
|
|
|
// KEY? SEPARATOR VALUE?
|
|
private static boolean property_0_0(PsiBuilder builder_, int level_) {
|
|
if (!recursion_guard_(builder_, level_, "property_0_0")) return false;
|
|
boolean result_ = false;
|
|
Marker marker_ = builder_.mark();
|
|
result_ = property_0_0_0(builder_, level_ + 1);
|
|
result_ = result_ && consumeToken(builder_, SEPARATOR);
|
|
result_ = result_ && property_0_0_2(builder_, level_ + 1);
|
|
if (!result_) {
|
|
marker_.rollbackTo();
|
|
}
|
|
else {
|
|
marker_.drop();
|
|
}
|
|
return result_;
|
|
}
|
|
|
|
// KEY?
|
|
private static boolean property_0_0_0(PsiBuilder builder_, int level_) {
|
|
if (!recursion_guard_(builder_, level_, "property_0_0_0")) return false;
|
|
consumeToken(builder_, KEY);
|
|
return true;
|
|
}
|
|
|
|
// VALUE?
|
|
private static boolean property_0_0_2(PsiBuilder builder_, int level_) {
|
|
if (!recursion_guard_(builder_, level_, "property_0_0_2")) return false;
|
|
consumeToken(builder_, VALUE);
|
|
return true;
|
|
}
|
|
|
|
/* ********************************************************** */
|
|
// item_*
|
|
static boolean simpleFile(PsiBuilder builder_, int level_) {
|
|
if (!recursion_guard_(builder_, level_, "simpleFile")) return false;
|
|
int offset_ = builder_.getCurrentOffset();
|
|
while (true) {
|
|
if (!item_(builder_, level_ + 1)) break;
|
|
int next_offset_ = builder_.getCurrentOffset();
|
|
if (offset_ == next_offset_) {
|
|
empty_element_parsed_guard_(builder_, offset_, "simpleFile");
|
|
break;
|
|
}
|
|
offset_ = next_offset_;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
}
|