📄 antlrparser.java
字号:
// $ANTLR 2.7.1: "antlr.g" -> "ANTLRParser.java"$
package antlr_oaa;
import antlr_oaa.TokenBuffer;
import antlr_oaa.TokenStreamException;
import antlr_oaa.TokenStreamIOException;
import antlr_oaa.ANTLRException;
import antlr_oaa.LLkParser;
import antlr_oaa.Token;
import antlr_oaa.TokenStream;
import antlr_oaa.RecognitionException;
import antlr_oaa.NoViableAltException;
import antlr_oaa.MismatchedTokenException;
import antlr_oaa.SemanticException;
import antlr_oaa.ParserSharedInputState;
import antlr_oaa.collections.impl.BitSet;
import antlr_oaa.collections.AST;
import antlr_oaa.ASTPair;
import antlr_oaa.collections.impl.ASTArray;
import java.util.Enumeration;
import java.io.DataInputStream;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class ANTLRParser extends antlr_oaa.LLkParser
implements ANTLRTokenTypes
{
private static final boolean DEBUG_PARSER = false;
ANTLRGrammarParseBehavior behavior;
Tool tool;
protected int blockNesting= -1;
public ANTLRParser(
TokenBuffer tokenBuf,
ANTLRGrammarParseBehavior behavior_,
Tool tool_
) {
super(tokenBuf, 1);
tokenNames = _tokenNames;
behavior = behavior_;
tool = tool_;
}
private boolean lastInRule() throws TokenStreamException {
if ( blockNesting==0 && (LA(1)==SEMI || LA(1)==LITERAL_exception || LA(1)==OR) ) {
return true;
}
return false;
}
private void checkForMissingEndRule(Token label) {
if ( label.getColumn()==1 ) {
Tool.warning("did you forget to terminate previous rule?", getFilename(), label.getLine());
}
}
protected ANTLRParser(TokenBuffer tokenBuf, int k) {
super(tokenBuf,k);
tokenNames = _tokenNames;
}
public ANTLRParser(TokenBuffer tokenBuf) {
this(tokenBuf,2);
}
protected ANTLRParser(TokenStream lexer, int k) {
super(lexer,k);
tokenNames = _tokenNames;
}
public ANTLRParser(TokenStream lexer) {
this(lexer,2);
}
public ANTLRParser(ParserSharedInputState state) {
super(state,2);
tokenNames = _tokenNames;
}
public final void grammar() throws RecognitionException, TokenStreamException {
Token n = null;
Token h = null;
try { // for error handling
{
_loop4:
do {
if ((LA(1)==LITERAL_header)) {
match(LITERAL_header);
{
switch ( LA(1)) {
case STRING_LITERAL:
{
n = LT(1);
match(STRING_LITERAL);
break;
}
case ACTION:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
h = LT(1);
match(ACTION);
if ( inputState.guessing==0 ) {
behavior.refHeaderAction(n,h);
}
}
else {
break _loop4;
}
} while (true);
}
{
switch ( LA(1)) {
case OPTIONS:
{
fileOptionsSpec();
break;
}
case EOF:
case ACTION:
case DOC_COMMENT:
case LITERAL_lexclass:
case LITERAL_class:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
_loop7:
do {
if (((LA(1) >= ACTION && LA(1) <= LITERAL_class))) {
classDef();
}
else {
break _loop7;
}
} while (true);
}
match(Token.EOF_TYPE);
}
catch (RecognitionException ex) {
if (inputState.guessing==0) {
reportError("rule grammar trapped: "+ex.toString());
consumeUntil(EOF);
} else {
throw ex;
}
}
}
public final void fileOptionsSpec() throws RecognitionException, TokenStreamException {
Token idTok; Token value;
match(OPTIONS);
{
_loop18:
do {
if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF)) {
idTok=id();
match(ASSIGN);
value=optionValue();
if ( inputState.guessing==0 ) {
behavior.setFileOption(idTok, value,getInputState().filename);
}
match(SEMI);
}
else {
break _loop18;
}
} while (true);
}
match(RCURLY);
}
public final void classDef() throws RecognitionException, TokenStreamException {
Token a = null;
Token d = null;
String doc=null;
try { // for error handling
{
switch ( LA(1)) {
case ACTION:
{
a = LT(1);
match(ACTION);
if ( inputState.guessing==0 ) {
behavior.refPreambleAction(a);
}
break;
}
case DOC_COMMENT:
case LITERAL_lexclass:
case LITERAL_class:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
switch ( LA(1)) {
case DOC_COMMENT:
{
d = LT(1);
match(DOC_COMMENT);
if ( inputState.guessing==0 ) {
doc=d.getText();
}
break;
}
case LITERAL_lexclass:
case LITERAL_class:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
boolean synPredMatched13 = false;
if (((LA(1)==LITERAL_lexclass||LA(1)==LITERAL_class) && (LA(2)==TOKEN_REF||LA(2)==RULE_REF))) {
int _m13 = mark();
synPredMatched13 = true;
inputState.guessing++;
try {
{
switch ( LA(1)) {
case LITERAL_lexclass:
{
match(LITERAL_lexclass);
break;
}
case LITERAL_class:
{
match(LITERAL_class);
id();
match(LITERAL_extends);
match(LITERAL_Lexer);
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
}
catch (RecognitionException pe) {
synPredMatched13 = false;
}
rewind(_m13);
inputState.guessing--;
}
if ( synPredMatched13 ) {
lexerSpec(doc);
}
else {
boolean synPredMatched15 = false;
if (((LA(1)==LITERAL_class) && (LA(2)==TOKEN_REF||LA(2)==RULE_REF))) {
int _m15 = mark();
synPredMatched15 = true;
inputState.guessing++;
try {
{
match(LITERAL_class);
id();
match(LITERAL_extends);
match(LITERAL_TreeParser);
}
}
catch (RecognitionException pe) {
synPredMatched15 = false;
}
rewind(_m15);
inputState.guessing--;
}
if ( synPredMatched15 ) {
treeParserSpec(doc);
}
else if ((LA(1)==LITERAL_class) && (LA(2)==TOKEN_REF||LA(2)==RULE_REF)) {
parserSpec(doc);
}
else {
throw new NoViableAltException(LT(1), getFilename());
}
}
}
rules();
if ( inputState.guessing==0 ) {
behavior.endGrammar();
}
}
catch (RecognitionException ex) {
if (inputState.guessing==0) {
if ( ex instanceof NoViableAltException ) {
NoViableAltException e = (NoViableAltException)ex;
if ( e.token.getType()==DOC_COMMENT ) {
reportError("line "+ex.line+": JAVADOC comments may only prefix rules and grammars");
}
else {
reportError("rule classDef trapped: "+ex.toString());
}
}
else {
reportError("rule classDef trapped: "+ex.toString());
}
behavior.abortGrammar();
boolean consuming = true;
// consume everything until the next class definition or EOF
while (consuming) {
consume();
switch(LA(1)) {
case LITERAL_class:
case LITERAL_lexclass:
case EOF:
consuming = false;
break;
}
}
} else {
throw ex;
}
}
}
public final Token id() throws RecognitionException, TokenStreamException {
Token idTok ;
Token a = null;
Token b = null;
idTok = null;
switch ( LA(1)) {
case TOKEN_REF:
{
a = LT(1);
match(TOKEN_REF);
if ( inputState.guessing==0 ) {
idTok = a;
}
break;
}
case RULE_REF:
{
b = LT(1);
match(RULE_REF);
if ( inputState.guessing==0 ) {
idTok = b;
}
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
return idTok ;
}
public final void lexerSpec(
String doc
) throws RecognitionException, TokenStreamException {
Token lc = null;
Token a = null;
Token idTok;
String sup=null;
{
switch ( LA(1)) {
case LITERAL_lexclass:
{
lc = LT(1);
match(LITERAL_lexclass);
idTok=id();
if ( inputState.guessing==0 ) {
System.out.println("warning: line " + lc.getLine() + ": 'lexclass' is deprecated; use 'class X extends Lexer'");
}
break;
}
case LITERAL_class:
{
match(LITERAL_class);
idTok=id();
match(LITERAL_extends);
match(LITERAL_Lexer);
{
switch ( LA(1)) {
case LPAREN:
{
sup=superClass();
break;
}
case SEMI:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
if ( inputState.guessing==0 ) {
behavior.startLexer(getFilename(), idTok,sup,doc);
}
match(SEMI);
{
switch ( LA(1)) {
case OPTIONS:
{
lexerOptionsSpec();
break;
}
case ACTION:
case DOC_COMMENT:
case TOKENS:
case TOKEN_REF:
case RULE_REF:
case LITERAL_protected:
case LITERAL_public:
case LITERAL_private:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
if ( inputState.guessing==0 ) {
behavior.endOptions();
}
{
switch ( LA(1)) {
case TOKENS:
{
tokensSpec();
break;
}
case ACTION:
case DOC_COMMENT:
case TOKEN_REF:
case RULE_REF:
case LITERAL_protected:
case LITERAL_public:
case LITERAL_private:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
switch ( LA(1)) {
case ACTION:
{
a = LT(1);
match(ACTION);
if ( inputState.guessing==0 ) {
behavior.refMemberAction(a);
}
break;
}
case DOC_COMMENT:
case TOKEN_REF:
case RULE_REF:
case LITERAL_protected:
case LITERAL_public:
case LITERAL_private:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
}
public final void treeParserSpec(
String doc
) throws RecognitionException, TokenStreamException {
Token a = null;
Token idTok;
String sup=null;
match(LITERAL_class);
idTok=id();
match(LITERAL_extends);
match(LITERAL_TreeParser);
{
switch ( LA(1)) {
case LPAREN:
{
sup=superClass();
break;
}
case SEMI:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
if ( inputState.guessing==0 ) {
behavior.startTreeWalker(getFilename(), idTok,sup,doc);
}
match(SEMI);
{
switch ( LA(1)) {
case OPTIONS:
{
treeParserOptionsSpec();
break;
}
case ACTION:
case DOC_COMMENT:
case TOKENS:
case TOKEN_REF:
case RULE_REF:
case LITERAL_protected:
case LITERAL_public:
case LITERAL_private:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
if ( inputState.guessing==0 ) {
behavior.endOptions();
}
{
switch ( LA(1)) {
case TOKENS:
{
tokensSpec();
break;
}
case ACTION:
case DOC_COMMENT:
case TOKEN_REF:
case RULE_REF:
case LITERAL_protected:
case LITERAL_public:
case LITERAL_private:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
switch ( LA(1)) {
case ACTION:
{
a = LT(1);
match(ACTION);
if ( inputState.guessing==0 ) {
behavior.refMemberAction(a);
}
break;
}
case DOC_COMMENT:
case TOKEN_REF:
case RULE_REF:
case LITERAL_protected:
case LITERAL_public:
case LITERAL_private:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
}
public final void parserSpec(
String doc
) throws RecognitionException, TokenStreamException {
Token a = null;
Token idTok;
String sup=null;
match(LITERAL_class);
idTok=id();
{
switch ( LA(1)) {
case LITERAL_extends:
{
match(LITERAL_extends);
match(LITERAL_Parser);
{
switch ( LA(1)) {
case LPAREN:
{
sup=superClass();
break;
}
case SEMI:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
break;
}
case SEMI:
{
if ( inputState.guessing==0 ) {
System.out.println("warning: line " +
idTok.getLine() + ": use 'class X extends Parser'");
}
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
if ( inputState.guessing==0 ) {
behavior.startParser(getFilename(), idTok, sup, doc);
}
match(SEMI);
{
switch ( LA(1)) {
case OPTIONS:
{
parserOptionsSpec();
break;
}
case ACTION:
case DOC_COMMENT:
case TOKENS:
case TOKEN_REF:
case RULE_REF:
case LITERAL_protected:
case LITERAL_public:
case LITERAL_private:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
if ( inputState.guessing==0 ) {
behavior.endOptions();
}
{
switch ( LA(1)) {
case TOKENS:
{
tokensSpec();
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -