| /******************************************************************************* |
| * Copyright (c) 2006, 2007 Eclipse.org |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| *******************************************************************************/ |
| package org.eclipse.gmf.internal.xpand.xtend.parser; |
| |
| import lpg.lpgjavaruntime.*; |
| import java.util.LinkedList; |
| import java.util.List; |
| import java.util.regex.Matcher; |
| import java.util.regex.Pattern; |
| |
| import org.eclipse.gmf.internal.xpand.util.ParserException.ErrorLocationInfo; |
| |
| import org.eclipse.gmf.internal.xpand.expression.parser.ExpressionFactory; |
| import org.eclipse.gmf.internal.xpand.xtend.ast.*; |
| |
| import org.eclipse.gmf.internal.xpand.expression.ast.*; |
| |
| import java.util.Collections; |
| |
| public class XtendParser extends PrsStream implements RuleAction { |
| private static ParseTable prs = new XtendParserprs(); |
| private DeterministicParser dtParser; |
| |
| public DeterministicParser getParser() { return dtParser; } |
| private void setResult(Object object) { dtParser.setSym1(object); } |
| public Object getRhsSym(int i) { return dtParser.getSym(i); } |
| |
| public int getRhsTokenIndex(int i) { return dtParser.getToken(i); } |
| public IToken getRhsIToken(int i) { return super.getIToken(getRhsTokenIndex(i)); } |
| |
| public int getRhsFirstTokenIndex(int i) { return dtParser.getFirstToken(i); } |
| public IToken getRhsFirstIToken(int i) { return super.getIToken(getRhsFirstTokenIndex(i)); } |
| |
| public int getRhsLastTokenIndex(int i) { return dtParser.getLastToken(i); } |
| public IToken getRhsLastIToken(int i) { return super.getIToken(getRhsLastTokenIndex(i)); } |
| |
| public int getLeftSpan() { return dtParser.getFirstToken(); } |
| public IToken getLeftIToken() { return super.getIToken(getLeftSpan()); } |
| |
| public int getRightSpan() { return dtParser.getLastToken(); } |
| public IToken getRightIToken() { return super.getIToken(getRightSpan()); } |
| |
| public int getRhsErrorTokenIndex(int i) { |
| int index = dtParser.getToken(i); |
| IToken err = super.getIToken(index); |
| return (err instanceof ErrorToken ? index : 0); |
| } |
| public ErrorToken getRhsErrorIToken(int i) { |
| int index = dtParser.getToken(i); |
| IToken err = super.getIToken(index); |
| return (ErrorToken) (err instanceof ErrorToken ? err : null); |
| } |
| |
| public XtendParser(LexStream lexStream) { |
| super(lexStream); |
| xtendFactory = new ExtensionFactory(lexStream.getFileName()); |
| factory = new ExpressionFactory(lexStream.getFileName()); |
| |
| try { |
| super.remapTerminalSymbols(orderedTerminalSymbols(), XtendParserprs.EOFT_SYMBOL); |
| } |
| catch(NullExportedSymbolsException e) { |
| } |
| catch(NullTerminalSymbolsException e) { |
| } |
| catch(UnimplementedTerminalsException e) { |
| java.util.ArrayList unimplemented_symbols = e.getSymbols(); |
| System.out.println("The Lexer will not scan the following token(s):"); |
| for (int i = 0; i < unimplemented_symbols.size(); i++) |
| { |
| Integer id = (Integer) unimplemented_symbols.get(i); |
| System.out.println(" " + XtendParsersym.orderedTerminalSymbols[id.intValue()]); |
| } |
| System.out.println(); |
| } |
| catch(UndefinedEofSymbolException e) { |
| throw new Error(new UndefinedEofSymbolException |
| ("The Lexer does not implement the Eof symbol " + |
| XtendParsersym.orderedTerminalSymbols[XtendParserprs.EOFT_SYMBOL])); |
| } |
| } |
| |
| public String[] orderedTerminalSymbols() { return XtendParsersym.orderedTerminalSymbols; } |
| public String getTokenKindName(int kind) { return XtendParsersym.orderedTerminalSymbols[kind]; } |
| public int getEOFTokenKind() { return XtendParserprs.EOFT_SYMBOL; } |
| public PrsStream getParseStream() { return (PrsStream) this; } |
| |
| public ExtensionFile parser() { |
| return parser(null, 0); |
| } |
| |
| public ExtensionFile parser(Monitor monitor) { |
| return parser(monitor, 0); |
| } |
| |
| public ExtensionFile parser(int error_repair_count) { |
| return parser(null, error_repair_count); |
| } |
| |
| public ExtensionFile parser(Monitor monitor, int error_repair_count) { |
| try { |
| resetErrors(); |
| dtParser = new DeterministicParser(monitor, (TokenStream)this, prs, (RuleAction)this); |
| } |
| catch (NotDeterministicParseTableException e) { |
| throw new Error(new NotDeterministicParseTableException |
| ("Regenerate XtendParserprs.java with -NOBACKTRACK option")); |
| } |
| catch (BadParseSymFileException e) { |
| throw new Error(new BadParseSymFileException("Bad Parser Symbol File -- XtendParsersym.java. Regenerate XtendParserprs.java")); |
| } |
| |
| try { |
| return (ExtensionFile) dtParser.parse(); |
| } |
| catch (BadParseException e) { |
| reset(e.error_token); // point to error token |
| |
| DiagnoseParser diagnoseParser = new DiagnoseParser(this, prs); |
| diagnoseParser.diagnose(e.error_token); |
| } |
| |
| return null; |
| } |
| |
| |
| public ErrorLocationInfo[] getErrors() { |
| return errors.toArray(new ErrorLocationInfo[errors.size()]); |
| } |
| |
| private void resetErrors() { |
| errors.clear(); |
| } |
| |
| private final List<ErrorLocationInfo> errors = new LinkedList<ErrorLocationInfo>(); |
| |
| @Override |
| public void reportError(int errorCode, String locationInfo, int leftToken, int rightToken, String tokenText) { |
| final int leftTokenLine = getLine(leftToken); |
| final int leftTokenColumn = getColumn(leftToken); |
| final int rightTokenLine = getEndLine(rightToken); |
| final int rightTokenColumn = getEndColumn(rightToken); |
| final String msg = tokenText + errorMsgText[errorCode]; |
| errors.add(new ErrorLocationInfo(msg, leftTokenLine, leftTokenColumn, rightTokenLine, rightTokenColumn)); |
| } |
| /* |
| @Override |
| public void reportError(int leftToken, int rightToken) { |
| int errorCode = (rightToken >= getStreamLength() ? EOF_CODE : leftToken == rightToken ? LEX_ERROR_CODE : INVALID_TOKEN_CODE); |
| int endToken = (leftToken == rightToken ? rightToken : rightToken - 1); |
| String msg = (errorCode == EOF_CODE ? "End-of-file " : errorCode == INVALID_TOKEN_CODE |
| ? "\"" + new String(getInputChars(), leftToken, rightToken - leftToken) + "\" " |
| : "\"" + getCharValue(leftToken) + "\" "); |
| |
| final int leftTokenLine = getLine(leftToken); |
| final int leftTokenColumn = getColumn(leftToken); |
| final int rightTokenLine = getEndLine(endToken); |
| final int rightTokenColumn = getEndColumn(endToken); |
| errors.add(new ErrorLocationInfo(msg, leftTokenLine, leftTokenColumn, rightTokenLine, rightTokenColumn)); |
| } |
| */ |
| @Override |
| public void reportError(int errorCode, String locationInfo, String tokenText) { |
| try { |
| Matcher m = Pattern.compile("(?:[^:]+::)*[^:]+:(\\d+):(\\d+):(\\d+):(\\d+):.*").matcher(locationInfo); |
| boolean t = m.matches(); // ignore return value, rely on exception if anything wrong |
| assert t; |
| final int leftTokenLine = getLine(Integer.parseInt(m.group(1))); |
| final int leftTokenColumn = getColumn(Integer.parseInt(m.group(2))); |
| final int rightTokenLine = getEndLine(Integer.parseInt(m.group(3))); |
| final int rightTokenColumn = getEndColumn(Integer.parseInt(m.group(4))); |
| final String msg = tokenText + errorMsgText[errorCode]; |
| errors.add(new ErrorLocationInfo(msg, leftTokenLine, leftTokenColumn, rightTokenLine, rightTokenColumn)); |
| } catch (Throwable ex) { |
| // ignore |
| errors.add(new ErrorLocationInfo(tokenText + errorMsgText[errorCode])); |
| } |
| } |
| |
| private final ExtensionFactory xtendFactory; |
| |
| private final ExpressionFactory factory; |
| |
| public void ruleAction(int ruleNumber) { |
| switch (ruleNumber) { |
| |
| // |
| // Rule 2: letExpression ::= let IDENT ASSIGN castedExpression COLON castedExpression |
| // |
| case 2: { |
| |
| setResult(factory.createLetExpression(getLeftIToken(),getRhsIToken(2),(Expression) getRhsSym(4), (Expression) getRhsSym(6))); |
| break; |
| } |
| // |
| // Rule 4: castedExpression ::= LPAREN type RPAREN infixExpression |
| // |
| case 4: { |
| |
| setResult(factory.createCast(getLeftIToken(), (Identifier) getRhsSym(2),(Expression) getRhsSym(4))); |
| break; |
| } |
| // |
| // Rule 7: chainExpression ::= ifExpression ARROW chainExpression |
| // |
| case 7: { |
| |
| Expression e = (Expression) getRhsSym(1); |
| Expression right = (Expression) getRhsSym(3); |
| if (right instanceof ChainExpression) { |
| ChainExpression rchain = (ChainExpression) right; |
| Expression newFirst = factory.createChainExpression(e, rchain.getFirst()); |
| setResult(factory.createChainExpression(newFirst, rchain.getNext())); |
| } else { |
| setResult(factory.createChainExpression(e, right)); |
| } |
| break; |
| } |
| // |
| // Rule 9: ifExpression ::= switchExpression QUESTION_MARK switchExpression COLON switchExpression |
| // |
| case 9: { |
| |
| setResult(factory.createIf((Expression) getRhsSym(1),(Expression) getRhsSym(3), (Expression) getRhsSym(5))); |
| break; |
| } |
| // |
| // Rule 10: switchExpression ::= switch LPAREN expression RPAREN LCURLY switchCases default COLON orExpression RCURLY |
| // |
| case 10: { |
| |
| setResult(factory.createSwitchExpression(getLeftIToken(),getRightIToken(), (Expression) getRhsSym(3), (List) getRhsSym(6), (Expression) getRhsSym(9))); |
| break; |
| } |
| // |
| // Rule 12: switchCases ::= $Empty |
| // |
| case 12: { |
| |
| setResult(Collections.emptyList()); |
| break; |
| } |
| // |
| // Rule 13: switchCases ::= case orExpression COLON orExpression switchCases |
| // |
| case 13: { |
| |
| LinkedList r = new LinkedList(); |
| r.add(factory.createCase(getLeftIToken(), (Expression) getRhsSym(2), (Expression) getRhsSym(4))); |
| r.addAll((List) getRhsSym(5)); |
| setResult(r); |
| break; |
| } |
| // |
| // Rule 15: orExpression ::= andExpression OR orExpression |
| // |
| case 15: { |
| |
| Expression e = (Expression) getRhsSym(1); |
| Expression r = (Expression) getRhsSym(3); |
| setResult(factory.createBooleanOperation(e.getStart(),r.getEnd(),e.getLine(),e.getStartOffset(),r.getEndOffset(),getRhsIToken(2),e,r)); |
| break; |
| } |
| // |
| // Rule 17: andExpression ::= impliesExpression AND andExpression |
| // |
| case 17: { |
| |
| Expression e = (Expression) getRhsSym(1); |
| Expression r = (Expression) getRhsSym(3); |
| setResult(factory.createBooleanOperation(e.getStart(),r.getEnd(),e.getLine(),e.getStartOffset(),r.getEndOffset(),getRhsIToken(2),e,r)); |
| break; |
| } |
| // |
| // Rule 19: impliesExpression ::= relationalExpression implies relationalExpression |
| // |
| case 19: { |
| |
| Expression e = (Expression) getRhsSym(1); |
| Expression r = (Expression) getRhsSym(3); |
| setResult(factory.createBooleanOperation(e.getStart(),r.getEnd(),e.getLine(),e.getStartOffset(),e.getEndOffset(),getRhsIToken(2),e,r)); |
| break; |
| } |
| // |
| // Rule 21: relationalExpression ::= additiveExpression relationalOperator additiveExpression |
| // |
| case 21: { |
| |
| Expression e = (Expression) getRhsSym(1); |
| IToken t = (IToken) getRhsSym(2); |
| Expression r = (Expression) getRhsSym(3); |
| setResult(factory.createOperationCall(e.getStart(),r.getEnd(),e.getLine(),e.getStartOffset(),r.getEndOffset(),t,e,Collections.singletonList(r))); |
| break; |
| } |
| // |
| // Rule 22: relationalOperator ::= EQ |
| // |
| case 22: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 23: relationalOperator ::= NE |
| // |
| case 23: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 24: relationalOperator ::= GE |
| // |
| case 24: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 25: relationalOperator ::= LE |
| // |
| case 25: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 26: relationalOperator ::= GT |
| // |
| case 26: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 27: relationalOperator ::= LT |
| // |
| case 27: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 29: additiveExpression ::= additiveExpression additiveOperator multiplicativeExpression |
| // |
| case 29: { |
| |
| Expression e = (Expression) getRhsSym(1); |
| IToken t = (IToken) getRhsSym(2); |
| Expression r = (Expression) getRhsSym(3); |
| setResult(factory.createOperationCall(e.getStart(),r.getEnd(),e.getLine(),e.getStartOffset(),r.getEndOffset(),t,e,Collections.singletonList(r))); |
| break; |
| } |
| // |
| // Rule 30: additiveOperator ::= PLUS |
| // |
| case 30: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 31: additiveOperator ::= MINUS |
| // |
| case 31: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 33: multiplicativeExpression ::= unaryExpression multiplicativeOperator multiplicativeExpression |
| // |
| case 33: { |
| |
| Expression e = (Expression) getRhsSym(1); |
| IToken t = (IToken) getRhsSym(2); |
| Expression r = (Expression) getRhsSym(3); |
| setResult(factory.createOperationCall(e.getStart(),r.getEnd(),e.getLine(),e.getStartOffset(),r.getEndOffset(),t,e,Collections.singletonList(r))); |
| break; |
| } |
| // |
| // Rule 34: multiplicativeOperator ::= MULTI |
| // |
| case 34: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 35: multiplicativeOperator ::= DIV |
| // |
| case 35: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 37: unaryExpression ::= NOT infixExpression |
| // |
| case 37: { |
| |
| Expression e = (Expression) getRhsSym(2); |
| setResult(factory.createOperationCall(getLeftIToken().getColumn(),e.getEnd(),getLeftIToken().getLine(),getLeftIToken().getStartOffset(),e.getEndOffset(),getLeftIToken(),e,Collections.EMPTY_LIST)); |
| break; |
| } |
| // |
| // Rule 38: unaryExpression ::= MINUS infixExpression |
| // |
| case 38: { |
| |
| Expression e = (Expression) getRhsSym(2); |
| setResult(factory.createOperationCall(getLeftIToken().getColumn(),e.getEnd(),getLeftIToken().getLine(),getLeftIToken().getStartOffset(),e.getEndOffset(),getLeftIToken(),e,Collections.EMPTY_LIST)); |
| break; |
| } |
| // |
| // Rule 39: infixExpressionSuffix ::= DOT featureCall |
| // |
| case 39: { |
| |
| setResult(getRhsSym(2)); |
| break; |
| } |
| // |
| // Rule 40: infixExpressionSuffix ::= DOT featureCall infixExpressionSuffix |
| // |
| case 40: { |
| |
| final FeatureCall op = (FeatureCall) getRhsSym(3); |
| FeatureCall fc = op; |
| while (fc.getTarget() != null) { |
| fc = (FeatureCall) fc.getTarget(); |
| } |
| fc.setTarget((FeatureCall) getRhsSym(2)); |
| setResult(op); |
| break; |
| } |
| // |
| // Rule 42: infixExpression ::= primaryExpression infixExpressionSuffix |
| // |
| case 42: { |
| |
| final FeatureCall op = (FeatureCall) getRhsSym(2); |
| FeatureCall fc = op; |
| while (fc.getTarget() != null) { |
| fc = (FeatureCall) fc.getTarget(); |
| } |
| fc.setTarget((Expression) getRhsSym(1)); |
| setResult(op); |
| break; |
| } |
| // |
| // Rule 43: primaryExpression ::= STRING |
| // |
| case 43: { |
| |
| setResult(factory.createStringLiteral(getLeftIToken())); |
| break; |
| } |
| // |
| // Rule 51: primaryExpression ::= LPAREN expression RPAREN |
| // |
| case 51: { |
| |
| Expression expr = (Expression) getRhsSym(2); |
| expr.setStartOffset(getLeftIToken().getStartOffset()); |
| expr.setEndOffset(getRightIToken().getEndOffset()); |
| setResult(expr); |
| break; |
| } |
| // |
| // Rule 52: featureCall ::= IDENT LPAREN parameterList RPAREN |
| // |
| case 52: { |
| |
| setResult(factory.createOperationCall(getRightIToken(),getLeftIToken(),null, (List<Expression>) getRhsSym(3))); |
| break; |
| } |
| // |
| // Rule 53: featureCall ::= IDENT LPAREN RPAREN |
| // |
| case 53: { |
| |
| setResult(factory.createOperationCall(getRightIToken(), getLeftIToken(), null, Collections.EMPTY_LIST)); |
| break; |
| } |
| // |
| // Rule 54: featureCall ::= type |
| // |
| case 54: { |
| |
| setResult(factory.createFeatureCall((Identifier) getRhsSym(1),null)); |
| break; |
| } |
| // |
| // Rule 56: listLiteral ::= LCURLY parameterList RCURLY |
| // |
| case 56: { |
| |
| setResult(factory.createListLiteral(getLeftIToken(),getRightIToken(), (List<Expression>) getRhsSym(2))); |
| break; |
| } |
| // |
| // Rule 57: listLiteral ::= LCURLY RCURLY |
| // |
| case 57: { |
| |
| setResult(factory.createListLiteral(getLeftIToken(), getRightIToken(), Collections.EMPTY_LIST)); |
| break; |
| } |
| // |
| // Rule 58: constructorCall ::= new simpleType |
| // |
| case 58: { |
| |
| setResult(factory.createConstructorCall(getLeftIToken(), (Identifier) getRhsSym(2))); |
| break; |
| } |
| // |
| // Rule 59: booleanLiteral ::= false |
| // |
| case 59: { |
| |
| setResult(factory.createBooleanLiteral(getRhsIToken(1))); |
| break; |
| } |
| // |
| // Rule 60: booleanLiteral ::= true |
| // |
| case 60: { |
| |
| setResult(factory.createBooleanLiteral(getRhsIToken(1))); |
| break; |
| } |
| // |
| // Rule 61: nullLiteral ::= null |
| // |
| case 61: { |
| |
| setResult(factory.createNullLiteral(getRhsIToken(1))); |
| break; |
| } |
| // |
| // Rule 62: intLiteral ::= INT_CONST |
| // |
| case 62: { |
| |
| setResult(factory.createIntegerLiteral(getRhsIToken(1))); |
| break; |
| } |
| // |
| // Rule 63: realLiteral ::= REAL_CONST |
| // |
| case 63: { |
| |
| setResult(factory.createRealLiteral(getRhsIToken(1))); |
| break; |
| } |
| // |
| // Rule 64: collectionExpression ::= typeSelect LPAREN type RPAREN |
| // |
| case 64: { |
| |
| setResult(factory.createTypeSelectExpression(getRhsIToken(1), getRightIToken(), (Identifier) getRhsSym(3),null)); |
| break; |
| } |
| // |
| // Rule 65: collectionExpression ::= collectionExpressionName LPAREN IDENT BAR expression RPAREN |
| // |
| case 65: { |
| |
| setResult(factory.createCollectionExpression((IToken) getRhsSym(1), getRightIToken(), getRhsIToken(3), (Expression) getRhsSym(5),null)); |
| break; |
| } |
| // |
| // Rule 66: collectionExpression ::= collectionExpressionName LPAREN expression RPAREN |
| // |
| case 66: { |
| |
| setResult(factory.createCollectionExpression((IToken) getRhsSym(1), getRightIToken(), null, (Expression) getRhsSym(3),null)); |
| break; |
| } |
| // |
| // Rule 67: collectionExpressionName ::= collect |
| // |
| case 67: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 68: collectionExpressionName ::= select |
| // |
| case 68: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 69: collectionExpressionName ::= reject |
| // |
| case 69: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 70: collectionExpressionName ::= exists |
| // |
| case 70: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 71: collectionExpressionName ::= notExists |
| // |
| case 71: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 72: collectionExpressionName ::= forAll |
| // |
| case 72: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 73: declaredParameterListOpt ::= $Empty |
| // |
| case 73: { |
| |
| setResult(Collections.EMPTY_LIST); |
| break; |
| } |
| // |
| // Rule 75: declaredParameterList ::= type IDENT |
| // |
| case 75: { |
| |
| Identifier id = factory.createIdentifier(getRightIToken()); |
| DeclaredParameter p = factory.createDeclaredParameter((Identifier) getRhsSym(1), id); |
| setResult(Collections.singletonList(p)); |
| break; |
| } |
| // |
| // Rule 76: declaredParameterList ::= type IDENT COMMA declaredParameterList |
| // |
| case 76: { |
| |
| LinkedList r = new LinkedList(); |
| Identifier id = factory.createIdentifier(getRhsIToken(2)); |
| DeclaredParameter p = factory.createDeclaredParameter((Identifier) getRhsSym(1), id); |
| r.add(p); |
| r.addAll((List) getRhsSym(4)); |
| setResult(r); |
| break; |
| } |
| // |
| // Rule 77: parameterList ::= expression |
| // |
| case 77: { |
| |
| setResult(Collections.singletonList((Expression) getRhsSym(1))); |
| break; |
| } |
| // |
| // Rule 78: parameterList ::= expression COMMA parameterList |
| // |
| case 78: { |
| |
| LinkedList r = new LinkedList(); |
| r.add(getRhsSym(1)); |
| r.addAll((List) getRhsSym(3)); |
| setResult(r); |
| break; |
| } |
| // |
| // Rule 81: collectionType ::= collectionTypeName LSQUARE simpleType RSQUARE |
| // |
| case 81: { |
| |
| Identifier id = (Identifier) getRhsSym(1); |
| id = id.append(factory.createIdentifier(getRhsIToken(2))); |
| id = id.append((Identifier) getRhsSym(3)); |
| id = id.append(factory.createIdentifier(getRhsIToken(4))); |
| setResult(id); |
| break; |
| } |
| // |
| // Rule 82: collectionTypeName ::= Collection |
| // |
| case 82: { |
| |
| setResult(factory.createIdentifier(getRhsIToken(1))); |
| break; |
| } |
| // |
| // Rule 83: collectionTypeName ::= List |
| // |
| case 83: { |
| |
| setResult(factory.createIdentifier(getRhsIToken(1))); |
| break; |
| } |
| // |
| // Rule 84: collectionTypeName ::= Set |
| // |
| case 84: { |
| |
| setResult(factory.createIdentifier(getRhsIToken(1))); |
| break; |
| } |
| // |
| // Rule 85: simpleType ::= IDENT NOT qualifiedType |
| // |
| case 85: { |
| |
| Identifier id = factory.createIdentifier(getLeftIToken()); |
| id = id.append(factory.createIdentifier(getRhsIToken(2))); |
| id = id.append((Identifier) getRhsSym(3)); |
| setResult(id); |
| break; |
| } |
| // |
| // Rule 87: qualifiedType ::= IDENT |
| // |
| case 87: { |
| |
| setResult(factory.createIdentifier(getLeftIToken())); |
| break; |
| } |
| // |
| // Rule 88: qualifiedType ::= IDENT DCOLON qualifiedType |
| // |
| case 88: { |
| |
| Identifier id = factory.createIdentifier(getLeftIToken()); |
| id = id.append(factory.createIdentifier(getRhsIToken(2))); |
| id = id.append((Identifier) getRhsSym(3)); |
| setResult(id); |
| break; |
| } |
| // |
| // Rule 89: extensionFile ::= nsImportsList extImportsList extensions |
| // |
| case 89: { |
| |
| setResult(xtendFactory.createExtensionFile((List) getRhsSym(1) , (List) getRhsSym(2), (List) getRhsSym(3))); |
| break; |
| } |
| // |
| // Rule 90: nsImportsList ::= $Empty |
| // |
| case 90: { |
| |
| setResult(Collections.EMPTY_LIST); |
| break; |
| } |
| // |
| // Rule 91: nsImportsList ::= nsImport nsImportsList |
| // |
| case 91: { |
| |
| List res = new LinkedList(); |
| res.add(getRhsSym(1)); |
| res.addAll((List) getRhsSym(2)); |
| setResult(res); |
| break; |
| } |
| // |
| // Rule 92: nsImport ::= import STRING SEMI |
| // |
| case 92: { |
| |
| StringLiteral st = xtendFactory.createStringLiteral(getRhsIToken(2)); |
| setResult(xtendFactory.createNsImport(getLeftIToken(), getRightIToken(), st)); |
| break; |
| } |
| // |
| // Rule 93: extImportsList ::= $Empty |
| // |
| case 93: { |
| |
| setResult(Collections.EMPTY_LIST); |
| break; |
| } |
| // |
| // Rule 94: extImportsList ::= extImport extImportsList |
| // |
| case 94: { |
| |
| List res = new LinkedList(); |
| res.add(getRhsSym(1)); |
| res.addAll((List) getRhsSym(2)); |
| setResult(res); |
| break; |
| } |
| // |
| // Rule 95: extImport ::= extension type SEMI |
| // |
| case 95: { |
| |
| setResult(xtendFactory.createExtensionFileImport(getLeftIToken(), getRightIToken(), (Identifier) getRhsSym(2), null)); |
| break; |
| } |
| // |
| // Rule 96: extImport ::= extension type reexport SEMI |
| // |
| case 96: { |
| |
| setResult(xtendFactory.createExtensionFileImport(getLeftIToken(), getRightIToken(), (Identifier) getRhsSym(2), getRhsIToken(3))); |
| break; |
| } |
| // |
| // Rule 97: extensions ::= $Empty |
| // |
| case 97: { |
| |
| setResult(Collections.EMPTY_LIST); |
| break; |
| } |
| // |
| // Rule 98: extensions ::= extensionDef extensions |
| // |
| case 98: { |
| |
| List res = new LinkedList(); |
| res.add(getRhsSym(1)); |
| res.addAll((List) getRhsSym(2)); |
| setResult(res); |
| break; |
| } |
| // |
| // Rule 101: regularExtension ::= visibilityOpt cachedOpt typeOpt IDENT LPAREN declaredParameterListOpt RPAREN COLON JAVA instanceSlotOpt javaType LPAREN javaParamsOpt RPAREN SEMI |
| // |
| case 101: { |
| |
| setResult(xtendFactory.createJavaExtension(getRhsIToken(4), getRightIToken(), (Identifier) getRhsSym(3), (List) getRhsSym(6), (Identifier) getRhsSym(11), (List) getRhsSym(13), (IToken) getRhsSym(2), (IToken) getRhsSym(1), (Identifier) getRhsSym(10))); |
| break; |
| } |
| // |
| // Rule 102: regularExtension ::= visibilityOpt cachedOpt typeOpt IDENT LPAREN declaredParameterListOpt RPAREN COLON GLOBALVAR slot SEMI |
| // |
| case 102: { |
| |
| setResult(xtendFactory.createWorkflowSlotExtension(getRhsIToken(4), getRightIToken(), (Identifier) getRhsSym(3), (List) getRhsSym(6), (Identifier) getRhsSym(10), (IToken) getRhsSym(2), (IToken) getRhsSym(1))); |
| break; |
| } |
| // |
| // Rule 103: regularExtension ::= visibilityOpt cachedOpt typeOpt IDENT LPAREN declaredParameterListOpt RPAREN COLON expression SEMI |
| // |
| case 103: { |
| |
| setResult(xtendFactory.createExpressionExtension(getRhsIToken(4), getRightIToken(), (Identifier) getRhsSym(3), (List) getRhsSym(6), (Expression) getRhsSym(9), (IToken) getRhsSym(2), (IToken) getRhsSym(1))); |
| break; |
| } |
| // |
| // Rule 104: createExtension ::= visibilityOpt create type identOpt IDENT LPAREN declaredParameterListOpt RPAREN COLON expression SEMI |
| // |
| case 104: { |
| |
| setResult(xtendFactory.createCreateExtension(getRhsIToken(2), getRightIToken(), (Identifier) getRhsSym(3), (IToken) getRhsSym(4), getRhsIToken(5), (List) getRhsSym(7), (Expression) getRhsSym(10), (IToken) getRhsSym(1))); |
| break; |
| } |
| // |
| // Rule 105: visibilityOpt ::= $Empty |
| // |
| case 105: { |
| |
| setResult(null); |
| break; |
| } |
| // |
| // Rule 106: visibilityOpt ::= private |
| // |
| case 106: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 107: cachedOpt ::= $Empty |
| // |
| case 107: { |
| |
| setResult(null); |
| break; |
| } |
| // |
| // Rule 108: cachedOpt ::= cached |
| // |
| case 108: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 109: typeOpt ::= $Empty |
| // |
| case 109: { |
| |
| setResult(null); |
| break; |
| } |
| // |
| // Rule 111: identOpt ::= $Empty |
| // |
| case 111: { |
| |
| setResult(null); |
| break; |
| } |
| // |
| // Rule 112: identOpt ::= IDENT |
| // |
| case 112: { |
| |
| setResult(getLeftIToken()); |
| break; |
| } |
| // |
| // Rule 113: instanceSlotOpt ::= $Empty |
| // |
| case 113: { |
| |
| setResult(null); |
| break; |
| } |
| // |
| // Rule 114: instanceSlotOpt ::= [ slot ] |
| // |
| case 114: { |
| |
| setResult(getRhsSym(2)); |
| break; |
| } |
| // |
| // Rule 115: javaType ::= IDENT javaTypeSuffix |
| // |
| case 115: { |
| |
| Identifier res = xtendFactory.createIdentifier(getRhsIToken(1)); |
| for (Object o : (List) getRhsSym(2)) { |
| res = res.append(factory.createIdentifier((IToken) o)); |
| } |
| setResult(res); |
| break; |
| } |
| // |
| // Rule 116: javaTypeSuffix ::= $Empty |
| // |
| case 116: { |
| |
| setResult(Collections.EMPTY_LIST); |
| break; |
| } |
| // |
| // Rule 117: javaTypeSuffix ::= DOT IDENT javaTypeSuffix |
| // |
| case 117: { |
| |
| List res = new LinkedList(); |
| res.add(getRhsIToken(1)); |
| res.add(getRhsIToken(2)); |
| res.addAll((List) getRhsSym(3)); |
| setResult(res); |
| break; |
| } |
| // |
| // Rule 118: javaTypeSuffix ::= DOT Collection javaTypeSuffix |
| // |
| case 118: { |
| |
| List res = new LinkedList(); |
| res.add(getRhsIToken(1)); |
| res.add(getRhsIToken(2)); |
| res.addAll((List) getRhsSym(3)); |
| setResult(res); |
| break; |
| } |
| // |
| // Rule 119: javaTypeSuffix ::= DOT List javaTypeSuffix |
| // |
| case 119: { |
| |
| List res = new LinkedList(); |
| res.add(getRhsIToken(1)); |
| res.add(getRhsIToken(2)); |
| res.addAll((List) getRhsSym(3)); |
| setResult(res); |
| break; |
| } |
| // |
| // Rule 120: javaTypeSuffix ::= DOT Set javaTypeSuffix |
| // |
| case 120: { |
| |
| List res = new LinkedList(); |
| res.add(getRhsIToken(1)); |
| res.add(getRhsIToken(2)); |
| res.addAll((List) getRhsSym(3)); |
| setResult(res); |
| break; |
| } |
| // |
| // Rule 121: javaParamsOpt ::= $Empty |
| // |
| case 121: { |
| |
| setResult(Collections.EMPTY_LIST); |
| break; |
| } |
| // |
| // Rule 123: javaParams ::= javaType |
| // |
| case 123: { |
| |
| setResult(Collections.singletonList(getRhsSym(1))); |
| break; |
| } |
| // |
| // Rule 124: javaParams ::= javaType COMMA javaParams |
| // |
| case 124: { |
| |
| List res = new LinkedList(); |
| res.add(getRhsSym(1)); |
| res.addAll((List) getRhsSym(3)); |
| setResult(res); |
| break; |
| } |
| // |
| // Rule 125: slot ::= IDENT |
| // |
| case 125: { |
| |
| setResult(xtendFactory.createIdentifier(getLeftIToken())); |
| break; |
| } |
| |
| default: |
| break; |
| } |
| return; |
| } |
| } |
| |