antlrparser.java
来自「SRI international 发布的OAA框架软件」· Java 代码 · 共 2,928 行 · 第 1/4 页
JAVA
2,928 行
}
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 rules() throws RecognitionException, TokenStreamException {
{
int _cnt68=0;
_loop68:
do {
if ((_tokenSet_0.member(LA(1))) && (_tokenSet_1.member(LA(2)))) {
rule();
}
else {
if ( _cnt68>=1 ) { break _loop68; } else {throw new NoViableAltException(LT(1), getFilename());}
}
_cnt68++;
} while (true);
}
}
public final Token optionValue() throws RecognitionException, TokenStreamException {
Token retval ;
Token sl = null;
Token cl = null;
Token il = null;
retval = null;
switch ( LA(1)) {
case TOKEN_REF:
case RULE_REF:
{
retval=qualifiedID();
break;
}
case STRING_LITERAL:
{
sl = LT(1);
match(STRING_LITERAL);
if ( inputState.guessing==0 ) {
retval = sl;
}
break;
}
case CHAR_LITERAL:
{
cl = LT(1);
match(CHAR_LITERAL);
if ( inputState.guessing==0 ) {
retval = cl;
}
break;
}
case INT:
{
il = LT(1);
match(INT);
if ( inputState.guessing==0 ) {
retval = il;
}
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
return retval ;
}
public final void parserOptionsSpec() throws RecognitionException, TokenStreamException {
Token idTok; Token value;
match(OPTIONS);
{
_loop21:
do {
if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF)) {
idTok=id();
match(ASSIGN);
value=optionValue();
if ( inputState.guessing==0 ) {
behavior.setGrammarOption(idTok, value);
}
match(SEMI);
}
else {
break _loop21;
}
} while (true);
}
match(RCURLY);
}
public final void treeParserOptionsSpec() throws RecognitionException, TokenStreamException {
Token idTok; Token value;
match(OPTIONS);
{
_loop24:
do {
if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF)) {
idTok=id();
match(ASSIGN);
value=optionValue();
if ( inputState.guessing==0 ) {
behavior.setGrammarOption(idTok, value);
}
match(SEMI);
}
else {
break _loop24;
}
} while (true);
}
match(RCURLY);
}
public final void lexerOptionsSpec() throws RecognitionException, TokenStreamException {
Token idTok; Token value; BitSet b;
match(OPTIONS);
{
_loop27:
do {
switch ( LA(1)) {
case LITERAL_charVocabulary:
{
match(LITERAL_charVocabulary);
match(ASSIGN);
b=charSet();
match(SEMI);
if ( inputState.guessing==0 ) {
behavior.setCharVocabulary(b);
}
break;
}
case TOKEN_REF:
case RULE_REF:
{
idTok=id();
match(ASSIGN);
value=optionValue();
if ( inputState.guessing==0 ) {
behavior.setGrammarOption(idTok, value);
}
match(SEMI);
break;
}
default:
{
break _loop27;
}
}
} while (true);
}
match(RCURLY);
}
public final BitSet charSet() throws RecognitionException, TokenStreamException {
BitSet b ;
b = null;
BitSet tmpSet = null;
b=setBlockElement();
{
_loop34:
do {
if ((LA(1)==OR)) {
match(OR);
tmpSet=setBlockElement();
if ( inputState.guessing==0 ) {
b.orInPlace(tmpSet);
}
}
else {
break _loop34;
}
} while (true);
}
return b ;
}
public final void subruleOptionsSpec() throws RecognitionException, TokenStreamException {
Token idTok; Token value;
match(OPTIONS);
{
_loop30:
do {
if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF)) {
idTok=id();
match(ASSIGN);
value=optionValue();
if ( inputState.guessing==0 ) {
behavior.setSubruleOption(idTok, value);
}
match(SEMI);
}
else {
break _loop30;
}
} while (true);
}
match(RCURLY);
}
/** Match a.b.c.d qualified ids; WILDCARD here is overloaded as
* id separator; that is, I need a reference to the '.' token.
*/
public final Token qualifiedID() throws RecognitionException, TokenStreamException {
Token qidTok=null;
StringBuffer buf = new StringBuffer(30);
Token a;
a=id();
if ( inputState.guessing==0 ) {
buf.append(a.getText());
}
{
_loop144:
do {
if ((LA(1)==WILDCARD)) {
match(WILDCARD);
a=id();
if ( inputState.guessing==0 ) {
buf.append('.'); buf.append(a.getText());
}
}
else {
break _loop144;
}
} while (true);
}
if ( inputState.guessing==0 ) {
// can use either TOKEN_REF or RULE_REF; should
// really create a QID or something instead.
qidTok = new CommonToken(TOKEN_REF, buf.toString());
qidTok.setLine(a.getLine());
}
return qidTok;
}
public final BitSet setBlockElement() throws RecognitionException, TokenStreamException {
BitSet b ;
Token c1 = null;
Token c2 = null;
b = null;
int rangeMin = 0;
c1 = LT(1);
match(CHAR_LITERAL);
if ( inputState.guessing==0 ) {
rangeMin = ANTLRLexer.tokenTypeForCharLiteral(c1.getText());
b = BitSet.of(rangeMin);
}
{
switch ( LA(1)) {
case RANGE:
{
match(RANGE);
c2 = LT(1);
match(CHAR_LITERAL);
if ( inputState.guessing==0 ) {
int rangeMax = ANTLRLexer.tokenTypeForCharLiteral(c2.getText());
if (rangeMax < rangeMin) {
tool.error("Malformed range line "+c1.getLine());
}
for (int i = rangeMin+1; i <= rangeMax; i++) {
b.add(i);
}
}
break;
}
case SEMI:
case OR:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
return b ;
}
public final void tokensSpec() throws RecognitionException, TokenStreamException {
Token t1 = null;
Token s1 = null;
Token s3 = null;
match(TOKENS);
{
int _cnt43=0;
_loop43:
do {
if ((LA(1)==STRING_LITERAL||LA(1)==TOKEN_REF)) {
{
switch ( LA(1)) {
case TOKEN_REF:
{
if ( inputState.guessing==0 ) {
s1=null;
}
t1 = LT(1);
match(TOKEN_REF);
{
switch ( LA(1)) {
case ASSIGN:
{
match(ASSIGN);
s1 = LT(1);
match(STRING_LITERAL);
break;
}
case SEMI:
case OPEN_ELEMENT_OPTION:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
if ( inputState.guessing==0 ) {
behavior.defineToken(t1, s1);
}
{
switch ( LA(1)) {
case OPEN_ELEMENT_OPTION:
{
tokensSpecOptions(t1);
break;
}
case SEMI:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
break;
}
case STRING_LITERAL:
{
s3 = LT(1);
match(STRING_LITERAL);
if ( inputState.guessing==0 ) {
behavior.defineToken(null, s3);
}
{
switch ( LA(1)) {
case OPEN_ELEMENT_OPTION:
{
tokensSpecOptions(s3);
break;
}
case SEMI:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
match(SEMI);
}
else {
if ( _cnt43>=1 ) { break _loop43; } else {throw new NoViableAltException(LT(1), getFilename());}
}
_cnt43++;
} while (true);
}
match(RCURLY);
}
public final void tokensSpecOptions(
Token t
) throws RecognitionException, TokenStreamException {
Token o=null, v=null;
match(OPEN_ELEMENT_OPTION);
o=id();
match(ASSIGN);
v=optionValue();
if ( inputState.guessing==0 ) {
behavior.refTokensSpecElementOption(t,o,v);
}
{
_loop46:
do {
if ((LA(1)==SEMI)) {
match(SEMI);
o=id();
match(ASSIGN);
v=optionValue();
if ( inputState.guessing==0 ) {
behavior.refTokensSpecElementOption(t,o,v);
}
}
else {
break _loop46;
}
} while (true);
}
match(CLOSE_ELEMENT_OPTION);
}
public final String superClass() throws RecognitionException, TokenStreamException {
String sup;
sup=null;
match(LPAREN);
if ( inputState.guessing==0 ) {
sup = LT(1).getText();
}
{
switch ( LA(1)) {
case TOKEN_REF:
{
match(TOKEN_REF);
break;
}
case RULE_REF:
{
match(RULE_REF);
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
match(RPAREN);
return sup;
}
public final void rule() throws RecognitionException, TokenStreamException {
Token d = null;
Token p1 = null;
Token p2 = null;
Token p3 = null;
Token aa = null;
Token rt = null;
Token a = null;
String access="public";
Token idTok;
String doc=null;
boolean ruleAutoGen = true;
blockNesting = -1; // block increments, so -1 to make rule at level 0
{
switch ( LA(1)) {
case DOC_COMMENT:
{
d = LT(1);
match(DOC_COMMENT);
if ( inputState.guessing==0 ) {
doc=d.getText();
}
break;
}
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 LITERAL_protected:
{
p1 = LT(1);
match(LITERAL_protected);
if ( inputState.guessing==0 ) {
access=p1.getText();
}
break;
}
case LITERAL_public:
{
p2 = LT(1);
match(LITERAL_public);
if ( inputState.guessing==0 ) {
access=p2.getText();
}
break;
}
case LITERAL_private:
{
p3 = LT(1);
match(LITERAL_private);
if ( inputState.guessing==0 ) {
access=p3.getText();
}
break;
}
case TOKEN_REF:
case RULE_REF:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
idTok=id();
{
switch ( LA(1)) {
case BANG:
{
match(BANG);
if ( inputState.guessing==0 ) {
ruleAutoGen = false;
}
break;
}
case ACTION:
case OPTIONS:
case ARG_ACTION:
case LITERAL_returns:
case COLON:
case LITERAL_throws:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
if ( inputState.guessing==0 ) {
behavior.defineRuleName(idTok, access, ruleAutoGen, doc);
}
{
switch ( LA(1)) {
case ARG_ACTION:
{
aa = LT(1);
match(ARG_ACTION);
if ( inputState.guessing==0 ) {
behavior.refArgAction(aa);
}
break;
}
case ACTION:
case OPTIONS:
case LITERAL_returns:
case COLON:
case LITERAL_throws:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
switch ( LA(1)) {
case LITERAL_returns:
{
match(LITERAL_returns);
rt = LT(1);
match(ARG_ACTION);
if ( inputState.guessing==0 ) {
behavior.refReturnAction(rt);
}
break;
}
case ACTION:
case OPTIONS:
case COLON:
case LITERAL_throws:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
switch ( LA(1)) {
case LITERAL_throws:
{
throwsSpec();
break;
}
case ACTION:
case OPTIONS:
case COLON:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
switch ( LA(1)) {
case OPTIONS:
{
ruleOptionsSpec();
break;
}
case ACTION:
case COLON:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
switch ( LA(1)) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?