blob: 2cb98433796d5e9357ad7bac48e2be929aec8537 [file] [log] [blame]
/*
* Copyright (c) 2006, 2009 Borland Software Corporation and others.
* 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
*
* Contributors:
* committers of openArchitectureWare - Xpand language syntax
* Artem Tikhomirov (Borland) - LALR grammar
* - Migration to OCL expressions
*/
package org.eclipse.gmf.internal.xpand.parser;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import lpg.lpgjavaruntime.BadParseException;
import lpg.lpgjavaruntime.BadParseSymFileException;
import lpg.lpgjavaruntime.DeterministicParser;
import lpg.lpgjavaruntime.DiagnoseParser;
import lpg.lpgjavaruntime.ErrorToken;
import lpg.lpgjavaruntime.IToken;
import lpg.lpgjavaruntime.LexStream;
import lpg.lpgjavaruntime.Monitor;
import lpg.lpgjavaruntime.NotDeterministicParseTableException;
import lpg.lpgjavaruntime.NullExportedSymbolsException;
import lpg.lpgjavaruntime.NullTerminalSymbolsException;
import lpg.lpgjavaruntime.ParseErrorCodes;
import lpg.lpgjavaruntime.ParseTable;
import lpg.lpgjavaruntime.PrsStream;
import lpg.lpgjavaruntime.RuleAction;
import lpg.lpgjavaruntime.TokenStream;
import lpg.lpgjavaruntime.UndefinedEofSymbolException;
import lpg.lpgjavaruntime.UnimplementedTerminalsException;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.gmf.internal.xpand.Activator;
import org.eclipse.gmf.internal.xpand.ast.Advice;
import org.eclipse.gmf.internal.xpand.ast.Definition;
import org.eclipse.gmf.internal.xpand.ast.IfStatement;
import org.eclipse.gmf.internal.xpand.ast.Template;
import org.eclipse.gmf.internal.xpand.expression.ast.Identifier;
import org.eclipse.gmf.internal.xpand.util.ParserException.ErrorLocationInfo;
import org.eclipse.m2m.internal.qvt.oml.cst.CompleteSignatureCS;
import org.eclipse.m2m.internal.qvt.oml.cst.DictLiteralExpCS;
import org.eclipse.m2m.internal.qvt.oml.cst.DictLiteralPartCS;
import org.eclipse.m2m.internal.qvt.oml.cst.DictionaryTypeCS;
import org.eclipse.m2m.internal.qvt.oml.cst.DirectionKindCS;
import org.eclipse.m2m.internal.qvt.oml.cst.DirectionKindEnum;
import org.eclipse.m2m.internal.qvt.oml.cst.ImperativeIterateExpCS;
import org.eclipse.m2m.internal.qvt.oml.cst.ImperativeOperationCallExpCS;
import org.eclipse.m2m.internal.qvt.oml.cst.LibraryImportCS;
import org.eclipse.m2m.internal.qvt.oml.cst.ListLiteralExpCS;
import org.eclipse.m2m.internal.qvt.oml.cst.ListTypeCS;
import org.eclipse.m2m.internal.qvt.oml.cst.ParameterDeclarationCS;
import org.eclipse.m2m.internal.qvt.oml.cst.SimpleSignatureCS;
import org.eclipse.m2m.internal.qvt.oml.cst.StatementCS;
import org.eclipse.m2m.internal.qvt.oml.cst.TypeSpecCS;
import org.eclipse.m2m.internal.qvt.oml.cst.temp.TempFactory;
import org.eclipse.ocl.cst.BooleanLiteralExpCS;
import org.eclipse.ocl.cst.CSTFactory;
import org.eclipse.ocl.cst.CSTNode;
import org.eclipse.ocl.cst.CallExpCS;
import org.eclipse.ocl.cst.CollectionLiteralExpCS;
import org.eclipse.ocl.cst.CollectionLiteralPartCS;
import org.eclipse.ocl.cst.CollectionRangeCS;
import org.eclipse.ocl.cst.CollectionTypeCS;
import org.eclipse.ocl.cst.CollectionTypeIdentifierEnum;
import org.eclipse.ocl.cst.DotOrArrowEnum;
import org.eclipse.ocl.cst.FeatureCallExpCS;
import org.eclipse.ocl.cst.IfExpCS;
import org.eclipse.ocl.cst.IntegerLiteralExpCS;
import org.eclipse.ocl.cst.InvalidLiteralExpCS;
import org.eclipse.ocl.cst.IsMarkedPreCS;
import org.eclipse.ocl.cst.IterateExpCS;
import org.eclipse.ocl.cst.IteratorExpCS;
import org.eclipse.ocl.cst.LetExpCS;
import org.eclipse.ocl.cst.LiteralExpCS;
import org.eclipse.ocl.cst.NullLiteralExpCS;
import org.eclipse.ocl.cst.OCLExpressionCS;
import org.eclipse.ocl.cst.OperationCallExpCS;
import org.eclipse.ocl.cst.PathNameCS;
import org.eclipse.ocl.cst.PrimitiveTypeCS;
import org.eclipse.ocl.cst.RealLiteralExpCS;
import org.eclipse.ocl.cst.SimpleNameCS;
import org.eclipse.ocl.cst.SimpleTypeEnum;
import org.eclipse.ocl.cst.StringLiteralExpCS;
import org.eclipse.ocl.cst.TupleLiteralExpCS;
import org.eclipse.ocl.cst.TupleTypeCS;
import org.eclipse.ocl.cst.TypeCS;
import org.eclipse.ocl.cst.UnlimitedNaturalLiteralExpCS;
import org.eclipse.ocl.cst.VariableCS;
import org.eclipse.ocl.cst.VariableExpCS;
import org.eclipse.ocl.util.OCLStandardLibraryUtil;
import org.eclipse.ocl.utilities.PredefinedType;
public class XpandParser extends PrsStream implements RuleAction {
private static ParseTable prs = new XpandParserprs();
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 XpandParser(LexStream lexStream) {
super(lexStream);
xpandFactory = new XpandFactory(lexStream.getFileName());
try {
super.remapTerminalSymbols(orderedTerminalSymbols(), XpandParserprs.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(" " + XpandParsersym.orderedTerminalSymbols[id.intValue()]);
}
System.out.println();
} catch (UndefinedEofSymbolException e) {
throw new Error(new UndefinedEofSymbolException("The Lexer does not implement the Eof symbol " + XpandParsersym.orderedTerminalSymbols[XpandParserprs.EOFT_SYMBOL]));
}
}
public String[] orderedTerminalSymbols() {
return XpandParsersym.orderedTerminalSymbols;
}
public String getTokenKindName(int kind) {
return XpandParsersym.orderedTerminalSymbols[kind];
}
public int getEOFTokenKind() {
return XpandParserprs.EOFT_SYMBOL;
}
public PrsStream getParseStream() {
return (PrsStream) this;
}
public Template parser() {
return parser(null, 0);
}
public Template parser(Monitor monitor) {
return parser(monitor, 0);
}
public Template parser(int error_repair_count) {
return parser(null, error_repair_count);
}
public Template 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 XpandParserprs.java with -NOBACKTRACK option"));
} catch (BadParseSymFileException e) {
throw new Error(new BadParseSymFileException("Bad Parser Symbol File -- XpandParsersym.java. Regenerate XpandParserprs.java"));
}
try {
return (Template) 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 i, String code) {
Activator.logWarn("Unexpected #reportError(int,String)");
reportError(i, i);
}
@Override
public void reportError(int leftToken, int rightToken) {
final int errorCode = (rightToken >= getStreamLength() ? EOF_CODE : leftToken == rightToken ? LEX_ERROR_CODE : INVALID_TOKEN_CODE);
final int endToken = (leftToken == rightToken ? rightToken : rightToken - 1);
reportError(errorCode, null, leftToken, endToken, getName(leftToken));
}
@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 = Integer.parseInt(m.group(1));
final int leftTokenColumn = Integer.parseInt(m.group(2));
final int rightTokenLine = Integer.parseInt(m.group(3));
final int rightTokenColumn = 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]));
}
}
@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] + (locationInfo != null && locationInfo.length() > 0 ? '(' + locationInfo + ')' : "");
final int startOffset = getStartOffset(leftToken);
final int endOffset = getEndOffset(rightToken);
errors.add(new ErrorLocationInfo(msg, leftTokenLine, leftTokenColumn, rightTokenLine, rightTokenColumn, startOffset, endOffset));
}
private final XpandFactory xpandFactory;
/**
*
* QVT Operational specific part
*
*/
@SuppressWarnings("unchecked")
private static final EList ourEmptyEList = new BasicEList.UnmodifiableEList(0, new Object[0]);
private void diagnozeErrorToken(int token_index) {
IToken token = getIToken(token_index);
if (token instanceof lpg.lpgjavaruntime.ErrorToken) {
token = ((lpg.lpgjavaruntime.ErrorToken) token).getErrorToken();
}
reportError(lpg.lpgjavaruntime.ParseErrorCodes.MISPLACED_CODE, "", token.getTokenIndex(), token.getTokenIndex(), //$NON-NLS-1$
"'" + token.toString() + "'"); //$NON-NLS-1$ //$NON-NLS-2$
reset(token.getTokenIndex()); // point to error token
DiagnoseParser diagnoseParser = new DiagnoseParser(this, prs);
diagnoseParser.diagnose(token.getTokenIndex());
dtParser.setSym1(null);
}
private ImperativeIterateExpCS createImperativeIterateExpCS(SimpleNameCS simpleNameCS, EList<VariableCS> iterators, VariableCS target, OCLExpressionCS body, OCLExpressionCS condition) {
ImperativeIterateExpCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createImperativeIterateExpCS();
result.setSimpleNameCS(simpleNameCS);
if (iterators.size() > 0) {
result.setVariable1(iterators.get(0));
if (iterators.size() > 1) {
result.setVariable2(iterators.get(1));
}
}
if (target != null) {
result.setTarget(target);
}
result.setBody(body);
result.setCondition(condition);
return result;
}
protected final CSTNode createCompleteSignatureCS(SimpleSignatureCS simpleSignatureCS, EList<ParameterDeclarationCS> resultList) {
CompleteSignatureCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createCompleteSignatureCS();
result.setSimpleSignature(simpleSignatureCS);
result.getResultParams().addAll(resultList);
return result;
}
protected final SimpleSignatureCS createSimpleSignatureCS(EList<ParameterDeclarationCS> paramsCS) {
SimpleSignatureCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createSimpleSignatureCS();
result.getParams().addAll(paramsCS);
return result;
}
protected final ParameterDeclarationCS createParameterDeclarationCS(DirectionKindCS sym, IToken tokenText, TypeSpecCS typeSpecCS) {
ParameterDeclarationCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createParameterDeclarationCS();
SimpleNameCS nameCS = null;
if (tokenText != null) {
nameCS = createSimpleNameCS(SimpleTypeEnum.IDENTIFIER_LITERAL, tokenText.toString());
setOffsets(nameCS, tokenText);
} else {
//nameCS = createSimpleNameCS(SimpleTypeEnum.IDENTIFIER_LITERAL, ""); //$NON-NLS-1$
}
result.setSimpleNameCS(nameCS);
result.setTypeSpecCS(typeSpecCS);
if (sym != null) {
result.setDirectionKind(sym.getDirectionKind());
}
return result;
}
protected final CSTNode createLibraryImportCS(PathNameCS sym) {
LibraryImportCS imp = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createLibraryImportCS();
imp.setPathNameCS(sym);
return imp;
}
protected final CSTNode createDirectionKindCS(DirectionKindEnum kind) {
DirectionKindCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createDirectionKindCS();
result.setDirectionKind(kind);
return result;
}
protected final TypeSpecCS createTypeSpecCS(TypeCS typeCS, IToken extentLocation) {
TypeSpecCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createTypeSpecCS();
result.setTypeCS(typeCS);
setOffsets(result, typeCS);
if (extentLocation != null) {
SimpleNameCS nameCS = createSimpleNameCS(SimpleTypeEnum.IDENTIFIER_LITERAL, extentLocation.toString());
setOffsets(nameCS, extentLocation);
result.setSimpleNameCS(nameCS);
result.setEndOffset(extentLocation.getEndOffset());
}
return result;
}
private ListTypeCS createListTypeCS(TypeCS typeCS) {
ListTypeCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createListTypeCS();
result.setTypeCS(typeCS);
return result;
}
private DictLiteralExpCS createDictLiteralExpCS(EList<DictLiteralPartCS> parts) {
DictLiteralExpCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createDictLiteralExpCS();
result.getParts().addAll(parts);
return result;
}
private DictionaryTypeCS createDictTypeCS(TypeCS keyTypeCS, TypeCS valueTypeCS) {
DictionaryTypeCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createDictionaryTypeCS();
result.setKey(keyTypeCS);
result.setValue(valueTypeCS);
return result;
}
private DictLiteralPartCS createDictLiteralPartCS(LiteralExpCS keyLiteralCS, OCLExpressionCS valueExpCS) {
DictLiteralPartCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createDictLiteralPartCS();
result.setKey(keyLiteralCS);
result.setValue(valueExpCS);
return result;
}
private final StatementCS createBreakCS() {
StatementCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createBreakExpCS();
return result;
}
private final StatementCS createContinueCS() {
StatementCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createContinueExpCS();
return result;
}
private ListLiteralExpCS createListLiteralExpCS(EList<CollectionLiteralPartCS> collectionLiteralParts) {
ListLiteralExpCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createListLiteralExpCS();
result.getCollectionLiteralParts().addAll(collectionLiteralParts);
return result;
}
private boolean isTokenOfType(IToken token, int kind) {
return (token != null) && (token.getKind() == kind);
}
private ImperativeOperationCallExpCS createFeatureFQNOperationCallExpCS(SimpleNameCS moduleName, SimpleNameCS operationName, EList<OCLExpressionCS> arguments) {
ImperativeOperationCallExpCS result = org.eclipse.m2m.internal.qvt.oml.cst.CSTFactory.eINSTANCE.createImperativeOperationCallExpCS();
return setupImperativeOperationCallExpCS(moduleName, operationName, arguments, result);
}
private OperationCallExpCS createDotOperationCallExpCS(OCLExpressionCS oclExpressionCS, PathNameCS pathNameCs, SimpleNameCS simpleNameCS, IsMarkedPreCS isMarkedPreCS,
EList<OCLExpressionCS> arguments) {
if (pathNameCs != null && pathNameCs.getSimpleNames().size() == 1) {
ImperativeOperationCallExpCS result = createFeatureFQNOperationCallExpCS(pathNameCs.getSimpleNames().get(0), simpleNameCS, arguments);
if (oclExpressionCS != null) {
result.setSource(oclExpressionCS);
result.setIsAtomic(true);
}
result.setAccessor(oclExpressionCS != null ? DotOrArrowEnum.DOT_LITERAL : DotOrArrowEnum.NONE_LITERAL);
if (isAtPre(isMarkedPreCS)) {
result.setIsMarkedPreCS(isMarkedPreCS);
}
return result;
}
OperationCallExpCS result = createOperationCallExpCS(oclExpressionCS, DotOrArrowEnum.DOT_LITERAL, pathNameCs, simpleNameCS, isMarkedPreCS, arguments);
if (oclExpressionCS != null) {
result.setIsAtomic(true);
}
return result;
}
private ImperativeOperationCallExpCS setupImperativeOperationCallExpCS(SimpleNameCS moduleName, SimpleNameCS operationName, EList<OCLExpressionCS> arguments, ImperativeOperationCallExpCS result) {
result.setModule(moduleName);
result.setSimpleNameCS(operationName);
result.getArguments().addAll(arguments);
return result;
}
private OperationCallExpCS createArrowOperationCallExpCS(OCLExpressionCS oclExpressionCS, SimpleNameCS simpleNameCS, IsMarkedPreCS isMarkedPreCS, EList<OCLExpressionCS> arguments) {
return createOperationCallExpCS(oclExpressionCS, DotOrArrowEnum.ARROW_LITERAL, null, simpleNameCS, isMarkedPreCS, arguments);
}
private OperationCallExpCS createOperationCallExpCS(OCLExpressionCS oclExpressionCS, DotOrArrowEnum dotOrArrow, PathNameCS pathNameCS, SimpleNameCS simpleNameCS, IsMarkedPreCS isMarkedPreCS,
EList<OCLExpressionCS> arguments) {
OperationCallExpCS result = CSTFactory.eINSTANCE.createOperationCallExpCS();
result.setSource(oclExpressionCS);
result.setAccessor(oclExpressionCS != null ? dotOrArrow : DotOrArrowEnum.NONE_LITERAL);
result.setPathNameCS((pathNameCS != null) && (pathNameCS.getSimpleNames().size() > 0) ? pathNameCS : null);
result.setSimpleNameCS(simpleNameCS);
result.getArguments().addAll(arguments);
if (isAtPre(isMarkedPreCS)) {
result.setIsMarkedPreCS(isMarkedPreCS);
}
return result;
}
private OperationCallExpCS createOperationCallExpCS(OCLExpressionCS oclExpressionCS, SimpleNameCS simpleNameCS, EList<OCLExpressionCS> arguments) {
return createOperationCallExpCS(oclExpressionCS, null, null, simpleNameCS, null, arguments);
}
private VariableExpCS createVariableExpCS(SimpleNameCS simpleNameCS, EList<OCLExpressionCS> arguments, IsMarkedPreCS isMarkedPreCS) {
VariableExpCS result = CSTFactory.eINSTANCE.createVariableExpCS();
result.setSimpleNameCS(simpleNameCS);
result.getArguments().addAll(arguments);
result.setIsMarkedPreCS(isMarkedPreCS);
return result;
}
private SimpleNameCS createSimpleNameCS(SimpleTypeEnum type, String value) {
SimpleNameCS result = CSTFactory.eINSTANCE.createSimpleNameCS();
result.setType(type);
result.setValue(unquote(value));
return result;
}
private PrimitiveTypeCS createPrimitiveTypeCS(SimpleTypeEnum type, String value) {
PrimitiveTypeCS result = CSTFactory.eINSTANCE.createPrimitiveTypeCS();
result.setType(type);
result.setValue(value);
return result;
}
private PathNameCS createPathNameCS(SimpleNameCS name) {
PathNameCS result = CSTFactory.eINSTANCE.createPathNameCS();
result.getSimpleNames().add(name);
return result;
}
private PathNameCS extendPathNameCS(PathNameCS path, SimpleNameCS name) {
path.getSimpleNames().add(name);
return path;
}
private SimpleNameCS removeLastSimpleNameCS(PathNameCS path) {
EList<SimpleNameCS> simpleNames = path.getSimpleNames();
SimpleNameCS name = simpleNames.remove(simpleNames.size() - 1);
setOffsets(path, path, simpleNames.size() > 0 ? simpleNames.get(simpleNames.size() - 1) : path);
return name;
}
private CollectionLiteralExpCS createCollectionLiteralExpCS(CollectionTypeCS typeCS, EList<CollectionLiteralPartCS> collectionLiteralParts) {
CollectionLiteralExpCS result = CSTFactory.eINSTANCE.createCollectionLiteralExpCS();
result.setCollectionType(typeCS.getCollectionTypeIdentifier());
result.getCollectionLiteralParts().addAll(collectionLiteralParts);
return result;
}
private CollectionLiteralPartCS createCollectionLiteralPartCS(OCLExpressionCS oclExpressionCS) {
CollectionLiteralPartCS result = CSTFactory.eINSTANCE.createCollectionLiteralPartCS();
result.setExpressionCS(oclExpressionCS);
return result;
}
private CollectionRangeCS createCollectionRangeCS(OCLExpressionCS oclExpressionCS, OCLExpressionCS lastOCLExpressionCS) {
CollectionRangeCS result = CSTFactory.eINSTANCE.createCollectionRangeCS();
result.setExpressionCS(oclExpressionCS);
result.setLastExpressionCS(lastOCLExpressionCS);
return result;
}
private TupleLiteralExpCS createTupleLiteralExpCS(EList<VariableCS> variables) {
TupleLiteralExpCS result = CSTFactory.eINSTANCE.createTupleLiteralExpCS();
result.getVariables().addAll(variables);
return result;
}
private IntegerLiteralExpCS createIntegerLiteralExpCS(String string) {
IntegerLiteralExpCS result = CSTFactory.eINSTANCE.createIntegerLiteralExpCS();
result.setSymbol(string);
result.setIntegerSymbol(Integer.valueOf(string));
return result;
}
@SuppressWarnings("nls")
private UnlimitedNaturalLiteralExpCS createUnlimitedNaturalLiteralExpCS(String string) {
UnlimitedNaturalLiteralExpCS result = CSTFactory.eINSTANCE.createUnlimitedNaturalLiteralExpCS();
result.setSymbol(string);
if ("*".equals(string)) {
result.setIntegerSymbol(-1);
} else {
result.setIntegerSymbol(Integer.valueOf(string));
}
return result;
}
private RealLiteralExpCS createRealLiteralExpCS(String string) {
RealLiteralExpCS result = CSTFactory.eINSTANCE.createRealLiteralExpCS();
result.setSymbol(string);
result.setRealSymbol(Double.valueOf(string));
return result;
}
private StringLiteralExpCS createStringLiteralExpCS(String string) {
StringLiteralExpCS result = CSTFactory.eINSTANCE.createStringLiteralExpCS();
result.setSymbol(string);
result.setStringSymbol(string);
return result;
}
private BooleanLiteralExpCS createBooleanLiteralExpCS(String string) {
BooleanLiteralExpCS result = CSTFactory.eINSTANCE.createBooleanLiteralExpCS();
result.setSymbol(string);
result.setBooleanSymbol(Boolean.valueOf(string));
return result;
}
private NullLiteralExpCS createNullLiteralExpCS(String string) {
NullLiteralExpCS result = CSTFactory.eINSTANCE.createNullLiteralExpCS();
result.setValue(string);
result.setType(SimpleTypeEnum.KEYWORD_LITERAL);
return result;
}
private InvalidLiteralExpCS createInvalidLiteralExpCS(String string) {
InvalidLiteralExpCS result = CSTFactory.eINSTANCE.createInvalidLiteralExpCS();
result.setValue(string);
result.setType(SimpleTypeEnum.KEYWORD_LITERAL);
return result;
}
protected IteratorExpCS createIteratorExpCS(OCLExpressionCS source, SimpleNameCS simpleNameCS, VariableCS variable1, VariableCS variable2, OCLExpressionCS oclExpressionCS) {
IteratorExpCS result = CSTFactory.eINSTANCE.createIteratorExpCS();
result.setSource(source);
result.setAccessor(DotOrArrowEnum.ARROW_LITERAL);
result.setSimpleNameCS(simpleNameCS);
result.setVariable1(variable1);
result.setVariable2(variable2);
result.setBody(oclExpressionCS);
return result;
}
protected IterateExpCS createIterateExpCS(OCLExpressionCS source, SimpleNameCS simpleNameCS, VariableCS variable1, VariableCS variable2, OCLExpressionCS oclExpressionCS) {
IterateExpCS result = CSTFactory.eINSTANCE.createIterateExpCS();
result.setSource(source);
result.setAccessor(DotOrArrowEnum.ARROW_LITERAL);
result.setSimpleNameCS(simpleNameCS);
result.setVariable1(variable1);
result.setVariable2(variable2);
result.setBody(oclExpressionCS);
return result;
}
private VariableCS createVariableCS(String varName, TypeCS typeCS, OCLExpressionCS oclExpressionCS) {
VariableCS result = CSTFactory.eINSTANCE.createVariableCS();
result.setName(unquote(varName));
result.setTypeCS(typeCS);
result.setInitExpression(oclExpressionCS);
return result;
}
private VariableCS createVariableCS(SimpleNameCS varName, TypeCS typeCS, OCLExpressionCS oclExpressionCS) {
VariableCS result = CSTFactory.eINSTANCE.createVariableCS();
result.setName(unquote(varName.getValue()));
result.setTypeCS(typeCS);
result.setInitExpression(oclExpressionCS);
return result;
}
protected CollectionTypeCS createCollectionTypeCS(CollectionTypeIdentifierEnum collectionType, String value) {
CollectionTypeCS result = CSTFactory.eINSTANCE.createCollectionTypeCS();
result.setType(SimpleTypeEnum.IDENTIFIER_LITERAL);
result.setValue(unquote(value));
result.setCollectionTypeIdentifier(collectionType);
return result;
}
private TupleTypeCS createTupleTypeCS(EList<VariableCS> variables) {
TupleTypeCS result = CSTFactory.eINSTANCE.createTupleTypeCS();
result.getVariables().addAll(variables);
return result;
}
private FeatureCallExpCS createFeatureCallExpCS(OCLExpressionCS source, PathNameCS pathNameCS, SimpleNameCS simpleNameCS, EList<OCLExpressionCS> arguments, IsMarkedPreCS isMarkedPreCS) {
FeatureCallExpCS result = CSTFactory.eINSTANCE.createFeatureCallExpCS();
result.setSource(source);
result.setAccessor(source != null ? DotOrArrowEnum.DOT_LITERAL : DotOrArrowEnum.NONE_LITERAL);
result.setPathNameCS((pathNameCS != null) && (pathNameCS.getSimpleNames().size() > 0) ? pathNameCS : null);
result.setSimpleNameCS(simpleNameCS);
result.getArguments().addAll(arguments);
if (isAtPre(isMarkedPreCS)) {
result.setIsMarkedPreCS(isMarkedPreCS);
}
return result;
}
private LetExpCS createLetExpCS(EList<VariableCS> variables, OCLExpressionCS oclExpressionCS) {
LetExpCS result = CSTFactory.eINSTANCE.createLetExpCS();
result.getVariables().addAll(variables);
result.setInExpression(oclExpressionCS);
return result;
}
private IfExpCS createIfExpCS(OCLExpressionCS condition, OCLExpressionCS thenExpression, OCLExpressionCS elseExpression) {
IfExpCS result = CSTFactory.eINSTANCE.createIfExpCS();
result.setCondition(condition);
result.setThenExpression(thenExpression);
result.setElseExpression(elseExpression);
return result;
}
private String unescape(IToken stringLiteral) {
String rawString = stringLiteral.toString();
int rawStringLength = rawString.length();
if (rawStringLength <= 2) {
return ""; //$NON-NLS-1$
}
StringBuilder unescapedStringBuilder = null;
boolean isBackslashEscapeProcessingUsed = true; // getEnvironment().isEnabled(ParsingOptions.USE_BACKSLASH_ESCAPE_PROCESSING);
boolean isNonStdSQEscapingUsed = false;
int n = rawStringLength - 1;
for (int i = 1; i < n; i++) {
char ch = rawString.charAt(i);
if ((isBackslashEscapeProcessingUsed && (ch == '\\')) || ((ch == '\'') && isNonStdSQSupported())) {
if (unescapedStringBuilder == null) {
unescapedStringBuilder = new StringBuilder(rawString.substring(1, i));
}
i++;
if (i >= n) {
reportError(ParseErrorCodes.INVALID_CODE, "", stringLiteral.getTokenIndex(), stringLiteral.getTokenIndex(), //$NON-NLS-1$
"String literal not properly closed");
}
char nextCh = rawString.charAt(i);
if (ch == '\\') {
switch (nextCh) {
case 'b':
unescapedStringBuilder.append('\b');
break;
case 't':
unescapedStringBuilder.append('\t');
break;
case 'n':
unescapedStringBuilder.append('\n');
break;
case 'f':
unescapedStringBuilder.append('\f');
break;
case 'r':
unescapedStringBuilder.append('\r');
break;
case '\"':
unescapedStringBuilder.append('\"');
break;
case '\'':
unescapedStringBuilder.append('\'');
break;
case '\\':
unescapedStringBuilder.append('\\');
break;
default:
// octal escape check
int unescapedChar = -1;
if ((nextCh >= '\u0030') && (nextCh <= '\u0037')) { // octal
// digit
unescapedChar = Character.getNumericValue(nextCh);
if (i + 1 < n) {
char tmpCh = rawString.charAt(i + 1);
if ((tmpCh >= '\u0030') && (tmpCh <= '\u0037')) { // octal
// digit
unescapedChar = 8 * unescapedChar + Character.getNumericValue(tmpCh);
i++;
if (i + 1 < n) {
tmpCh = rawString.charAt(i + 1);
if ((tmpCh >= '\u0030') && (tmpCh <= '\u0037') // octal
// digit
&& (nextCh <= '\u0033')) { // most-significant
// digit
// in
// range
// 0..2
unescapedChar = 8 * unescapedChar + Character.getNumericValue(tmpCh);
i++;
}
}
}
}
unescapedStringBuilder.append((char) unescapedChar);
}
if (unescapedChar < 0) {
reportError(ParseErrorCodes.INVALID_CODE, "", stringLiteral.getTokenIndex(), stringLiteral.getTokenIndex(), //$NON-NLS-1$
"Invalid escape sequence (valid ones are \\b \\t \\n \\f \\r \\\" \\\' \\\\)");
}
break;
}
} else { // non-std '' escaping
unescapedStringBuilder.append('\'');
isNonStdSQEscapingUsed = true;
assert nextCh == '\'' : "Unexpected escape sequence in string literal: " + rawString; //$NON-NLS-1$
}
} else if (unescapedStringBuilder != null) {
unescapedStringBuilder.append(ch);
}
}
if (isNonStdSQEscapingUsed) {
// Should not be called - isNonStdSQSupported returns false
// // check settings for using non-standard closure iterator
// ProblemHandler.Severity sev = getEnvironment().getValue(
// ProblemOption.STRING_SINGLE_QUOTE_ESCAPE);
// if ((sev != null) && (sev != ProblemHandler.Severity.OK)) {
// getEnvironment().problem(
// sev,
// ProblemHandler.Phase.PARSER,
// OCLMessages.bind(OCLMessages.NonStd_SQuote_Escape_,
// stringLiteral), "STRING_LITERAL", //$NON-NLS-1$
// null);
// }
}
return (unescapedStringBuilder == null) ? rawString.substring(1, n) : unescapedStringBuilder.toString();
}
private boolean isNonStdSQSupported() {
return false;
}
/**
* Sets the start and end offsets of the given <code>CSTNode</code> to the
* start and end offsets of the given <code>IToken</code>
*
* @param cstNode
* <code>CSTNode</code> to set offsets
* @param startEnd
* <code>IToken</code> to retrieve offsets from
*/
private void setOffsets(CSTNode cstNode, IToken startEnd) {
cstNode.setStartOffset(startEnd.getStartOffset());
cstNode.setEndOffset(startEnd.getEndOffset());
}
/**
* Sets the start and end offsets of the given <code>CSTNode</code> to the
* start and end offsets of the 2nd given <code>CSTNode</code>
*
* @param cstNode
* <code>CSTNode</code> to set offsets
* @param startEnd
* <code>CSTNode</code> to retrieve offsets from
*/
private void setOffsets(CSTNode cstNode, CSTNode startEnd) {
cstNode.setStartOffset(startEnd.getStartOffset());
cstNode.setEndOffset(startEnd.getEndOffset());
}
/**
* Sets the start and end offsets of the given <code>CSTNode</code> to the
* start offset of the 2nd given <code>CSTNode</code> and the end offset of
* the 3rd given <code>CSTNode</code>
*
* @param cstNode
* <code>CSTNode</code> to set offsets
* @param start
* <code>CSTNode</code> to retrieve start offset from
* @param end
* <code>CSTNode</code> to retrieve end offset from
*/
private void setOffsets(CSTNode cstNode, CSTNode start, CSTNode end) {
cstNode.setStartOffset(start.getStartOffset());
cstNode.setEndOffset(end.getEndOffset());
}
/**
* Sets the start and end offsets of the given <code>CSTNode</code> to the
* start offset of the 2nd given <code>CSTNode</code> and the end offset of
* the given <code>IToken</code>
*
* @param cstNode
* <code>CSTNode</code> to set offsets
* @param start
* <code>CSTNode</code> to retrieve start offset from
* @param end
* <code>IToken</code> to retrieve end offset from
*/
private void setOffsets(CSTNode cstNode, CSTNode start, IToken end) {
cstNode.setStartOffset(start.getStartOffset());
cstNode.setEndOffset(end.getEndOffset());
}
/**
* Sets the start and end offsets of the given <code>CSTNode</code> to the
* start offset of the given <code>IToken</code> and the end offset of the
* 2nd given <code>CSTNode</code>
*
* @param cstNode
* <code>CSTNode</code> to set offsets
* @param start
* <code>IToken</code> to retrieve start offset from
* @param end
* <code>CSTNode</code> to retrieve end offset from
*/
private void setOffsets(CSTNode cstNode, IToken start, CSTNode end) {
cstNode.setStartOffset(start.getStartOffset());
cstNode.setEndOffset(end.getEndOffset());
}
/**
* Sets the start and end offsets of the given <code>CSTNode</code> to the
* start offset of the 1std given <code>IToken</code> and the end offset of
* the 2nd given <code>IToken</code>
*
* @param cstNode
* <code>CSTNode</code> to set offsets
* @param start
* <code>IToken</code> to retrieve start offset from
* @param end
* <code>IToken</code> to retrieve end offset from
*/
private void setOffsets(CSTNode cstNode, IToken start, IToken end) {
cstNode.setStartOffset(start.getStartOffset());
cstNode.setEndOffset(end.getEndOffset());
}
/**
* Removes the "s surrounding a quoted string, if any.
*
* @param quoted
* a possibly quoted string
* @return <code>quoted</code> without the surrounding quotes, or just
* <code>quoted</code> verbatim if there were none
*/
private String unquote(String quoted) {
String result = quoted;
if ((result != null) && (result.length() > 1)) {
int max = result.length() - 1;
if ((result.charAt(0) == '"') && (quoted.charAt(max) == '"')) {
result = result.substring(1, max);
}
// this is a regexp, so the backslash needs to be
// re-escaped, thus "\\" is rendered in a Java
// string literal as "\\\\"
result = result.replaceAll("\\\\\"", "\""); //$NON-NLS-2$//$NON-NLS-1$
/*
* [artem] removed extra error handling fon non-spec escape
* processing
*/
}
return result;
}
private boolean isAtPre(IsMarkedPreCS atPreCS) {
return atPreCS != null;
}
@SuppressWarnings("unchecked")
public void ruleAction(int ruleNumber) {
switch (ruleNumber) {
//
// Rule 31: binaryKeywordCS ::= binaryKeyword
//
case 31:
//
// Rule 32: unaryKeywordCS ::= unaryKeyword
//
case 32:
//
// Rule 33: reservedPunctuationCS ::= reservedPunctuation
//
case 33: {
SimpleNameCS result = createSimpleNameCS(SimpleTypeEnum.KEYWORD_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 34: iterateNameCS ::= iterateIdentifier
//
case 34:
//
// Rule 35: iteratorNameCS ::= iteratorIdentifier
//
case 35:
//
// Rule 36: simpleIdentifierCS ::= otherIdentifier
//
case 36: {
CSTNode result = createSimpleNameCS(SimpleTypeEnum.IDENTIFIER_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 38: simpleIdentifierCS ::= self
//
case 38: {
CSTNode result = createSimpleNameCS(SimpleTypeEnum.SELF_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 51: pathNameCS ::= notReservedSimpleNameCS
//
case 51: {
SimpleNameCS simpleName = (SimpleNameCS) dtParser.getSym(1);
PathNameCS result = createPathNameCS(simpleName);
setOffsets(result, simpleName);
dtParser.setSym1(result);
break;
}
//
// Rule 53: qualifiedPathNameCS ::= pathNameCS ::
// notReservedSimpleNameCS
//
case 53: {
PathNameCS result = (PathNameCS) dtParser.getSym(1);
SimpleNameCS simpleName = (SimpleNameCS) dtParser.getSym(3);
result = extendPathNameCS(result, simpleName);
setOffsets(result, result, simpleName);
dtParser.setSym1(result);
break;
}
//
// Rule 54: primitiveTypeCS ::= Boolean
//
case 54: {
CSTNode result = createPrimitiveTypeCS(SimpleTypeEnum.BOOLEAN_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 55: primitiveTypeCS ::= Integer
//
case 55: {
CSTNode result = createPrimitiveTypeCS(SimpleTypeEnum.INTEGER_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 56: primitiveTypeCS ::= Real
//
case 56: {
CSTNode result = createPrimitiveTypeCS(SimpleTypeEnum.REAL_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 57: primitiveTypeCS ::= String
//
case 57: {
CSTNode result = createPrimitiveTypeCS(SimpleTypeEnum.STRING_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 58: primitiveTypeCS ::= UnlimitedNatural
//
case 58: {
CSTNode result = createPrimitiveTypeCS(SimpleTypeEnum.UNLIMITED_NATURAL_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 59: primitiveTypeCS ::= OclAny
//
case 59: {
CSTNode result = createPrimitiveTypeCS(SimpleTypeEnum.OCL_ANY_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 60: primitiveTypeCS ::= OclInvalid
//
case 60: {
CSTNode result = createPrimitiveTypeCS(SimpleTypeEnum.OCL_INVALID_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 61: primitiveTypeCS ::= OclVoid
//
case 61: {
CSTNode result = createPrimitiveTypeCS(SimpleTypeEnum.OCL_VOID_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 62: CollectionTypeIdentifierCS ::= Bag
//
case 62: {
SimpleNameCS result = createCollectionTypeCS(CollectionTypeIdentifierEnum.BAG_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 63: CollectionTypeIdentifierCS ::= Collection
//
case 63: {
SimpleNameCS result = createCollectionTypeCS(CollectionTypeIdentifierEnum.COLLECTION_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 64: CollectionTypeIdentifierCS ::= OrderedSet
//
case 64: {
SimpleNameCS result = createCollectionTypeCS(CollectionTypeIdentifierEnum.ORDERED_SET_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 65: CollectionTypeIdentifierCS ::= Sequence
//
case 65: {
SimpleNameCS result = createCollectionTypeCS(CollectionTypeIdentifierEnum.SEQUENCE_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 66: CollectionTypeIdentifierCS ::= Set
//
case 66: {
SimpleNameCS result = createCollectionTypeCS(CollectionTypeIdentifierEnum.SET_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 67: collectionTypeCS ::= CollectionTypeIdentifierCS ( typeCS
// )
//
case 67: {
CollectionTypeCS result = (CollectionTypeCS) dtParser.getSym(1);
result.setTypeCS((TypeCS) dtParser.getSym(3));
setOffsets(result, result, getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 68: tupleTypeCS ::= Tuple ( variableDeclarationListCSopt )
//
case 68: {
CSTNode result = createTupleTypeCS((EList) dtParser.getSym(3));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 69: typeCS ::= notReservedSimpleNameCS
//
case 69: {
CSTNode result = (CSTNode) dtParser.getSym(1);
if (!(result instanceof TypeCS)) {
PathNameCS pathNameCS = createPathNameCS((SimpleNameCS) result);
setOffsets(pathNameCS, result);
result = pathNameCS;
}
dtParser.setSym1(result);
break;
}
//
// Rule 77: typedVariableCS ::= BooleanLiteralExpCS : typeCS
//
case 77:
//
// Rule 78: typedVariableCS ::= InvalidLiteralExpCS : typeCS
//
case 78:
//
// Rule 79: typedVariableCS ::= NullLiteralExpCS : typeCS
//
case 79:
//
// Rule 80: typedVariableCS ::= notLiteralNorReservedSimpleNameCS :
// typeCS
//
case 80: {
SimpleNameCS name = (SimpleNameCS) dtParser.getSym(1);
TypeCS type = (TypeCS) dtParser.getSym(3);
VariableCS result = createVariableCS(name, type, null);
setOffsets(result, name, type);
dtParser.setSym1(result);
break;
}
//
// Rule 81: VariableDeclarationCS ::= variableNameCS
//
case 81: {
SimpleNameCS name = (SimpleNameCS) dtParser.getSym(1);
CSTNode result = createVariableCS(name, null, null);
setOffsets(result, name);
dtParser.setSym1(result);
break;
}
//
// Rule 83: VariableDeclarationCS ::= typedVariableCS =
// OclExpressionCS
//
case 83: {
VariableCS result = (VariableCS) dtParser.getSym(1);
OCLExpressionCS initExpression = (OCLExpressionCS) dtParser.getSym(3);
result.setInitExpression(initExpression);
setOffsets(result, result, initExpression);
dtParser.setSym1(result);
break;
}
//
// Rule 84: variableDeclarationListCS ::= VariableDeclarationCS
//
case 84: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 85: variableDeclarationListCS ::= variableDeclarationListCS
// , VariableDeclarationCS
//
case 85: {
EList result = (EList) dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 86: variableDeclarationListCSopt ::= $Empty
//
case 86:
dtParser.setSym1(new BasicEList());
break;
//
// Rule 88: BooleanLiteralExpCS ::= false
//
case 88: {
CSTNode result = createBooleanLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 89: BooleanLiteralExpCS ::= true
//
case 89: {
CSTNode result = createBooleanLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 90: IntegerLiteralExpCS ::= INTEGER_LITERAL
//
case 90: {
CSTNode result = createIntegerLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 91: InvalidLiteralExpCS ::= invalid
//
case 91: {
CSTNode result = createInvalidLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 92: NullLiteralExpCS ::= null
//
case 92: {
CSTNode result = createNullLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 93: RealLiteralExpCS ::= REAL_LITERAL
//
case 93: {
CSTNode result = createRealLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 94: StringLiteralExpCS ::= STRING_LITERAL
//
case 94: {
IToken literalToken = getIToken(dtParser.getToken(1));
StringLiteralExpCS result = createStringLiteralExpCS(literalToken.toString());
result.setUnescapedStringSymbol(unescape(literalToken));
setOffsets(result, literalToken);
dtParser.setSym1(result);
break;
}
//
// Rule 95: UnlimitedNaturalLiteralExpCS ::= *
//
case 95: {
CSTNode result = createUnlimitedNaturalLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 101: CollectionLiteralExpCS ::= CollectionTypeIdentifierCS {
// CollectionLiteralPartsCSopt }
//
case 101: {
CollectionTypeCS typeCS = (CollectionTypeCS) dtParser.getSym(1);
CSTNode result = createCollectionLiteralExpCS(typeCS, (EList) dtParser.getSym(3));
setOffsets(result, typeCS, getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 102: CollectionRangeCS ::= OclExpressionCS ..
// OclExpressionCS
//
case 102: {
CSTNode result = createCollectionRangeCS((OCLExpressionCS) dtParser.getSym(1), (OCLExpressionCS) dtParser.getSym(3));
setOffsets(result, (CSTNode) dtParser.getSym(1), (CSTNode) dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 104: CollectionLiteralPartCS ::= OclExpressionCS
//
case 104: {
CSTNode result = createCollectionLiteralPartCS((OCLExpressionCS) dtParser.getSym(1));
setOffsets(result, (CSTNode) dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 105: CollectionLiteralPartsCS ::= CollectionLiteralPartCS
//
case 105: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 106: CollectionLiteralPartsCS ::= CollectionLiteralPartsCS ,
// CollectionLiteralPartCS
//
case 106: {
EList result = (EList) dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 107: CollectionLiteralPartsCSopt ::= $Empty
//
case 107:
dtParser.setSym1(new BasicEList());
break;
//
// Rule 109: TupleLiteralExpCS ::= Tuple { TupleLiteralPartsCS }
//
case 109: {
CSTNode result = createTupleLiteralExpCS((EList) dtParser.getSym(3));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 110: TupleLiteralPartCS ::= variableNameCS = OclExpressionCS
//
case 110: {
SimpleNameCS name = (SimpleNameCS) dtParser.getSym(1);
OCLExpressionCS initExpression = (OCLExpressionCS) dtParser.getSym(3);
VariableCS result = createVariableCS(name, null, initExpression);
setOffsets(result, name, initExpression);
dtParser.setSym1(result);
break;
}
//
// Rule 111: TupleLiteralPartCS ::= typedVariableCS =
// OclExpressionCS
//
case 111: {
VariableCS result = (VariableCS) dtParser.getSym(1);
OCLExpressionCS initExpression = (OCLExpressionCS) dtParser.getSym(3);
result.setInitExpression(initExpression);
setOffsets(result, result, initExpression);
dtParser.setSym1(result);
break;
}
//
// Rule 112: TupleLiteralPartsCS ::= TupleLiteralPartCS
//
case 112: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 113: TupleLiteralPartsCS ::= TupleLiteralPartsCS ,
// TupleLiteralPartCS
//
case 113: {
EList result = (EList) dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 119: OperationCallExpCS ::= primaryExpCS ->
// notIteratorNorReservedSimpleNameCS isMarkedPreCSopt (
// argumentsCSopt )
//
case 119: {
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
CSTNode result = createArrowOperationCallExpCS(source, (SimpleNameCS) dtParser.getSym(3), (IsMarkedPreCS) dtParser.getSym(4), (EList) dtParser.getSym(6));
setOffsets(result, source, getIToken(dtParser.getToken(7)));
dtParser.setSym1(result);
break;
}
//
// Rule 120: OperationCallExpCS ::= primaryExpCS . binaryKeywordCS
// isMarkedPreCSopt ( argumentsCSopt )
//
case 120:
//
// Rule 121: OperationCallExpCS ::= primaryExpCS . unaryKeywordCS
// isMarkedPreCSopt ( argumentsCSopt )
//
case 121:
//
// Rule 122: OperationCallExpCS ::= primaryExpCS .
// reservedPunctuationCS isMarkedPreCSopt ( argumentsCSopt )
//
case 122:
//
// Rule 123: OperationCallExpCS ::= primaryExpCS .
// notReservedSimpleNameCS isMarkedPreCSopt ( argumentsCSopt )
//
case 123: {
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
CSTNode result = createDotOperationCallExpCS(source, null, (SimpleNameCS) dtParser.getSym(3), (IsMarkedPreCS) dtParser.getSym(4), (EList) dtParser.getSym(6));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(7)));
dtParser.setSym1(result);
break;
}
//
// Rule 124: OperationCallExpCS ::= literalSimpleNameCS
// isMarkedPreCSopt ( argumentsCSopt )
//
case 124:
//
// Rule 125: OperationCallExpCS ::=
// notLiteralNorReservedSimpleNameCS isMarkedPreCSopt (
// argumentsCSopt )
//
case 125: {
CSTNode result = createDotOperationCallExpCS(null, null, (SimpleNameCS) dtParser.getSym(1), (IsMarkedPreCS) dtParser.getSym(2), (EList) dtParser.getSym(4));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(5)));
dtParser.setSym1(result);
break;
}
//
// Rule 126: OperationCallExpCS ::= qualifiedPathNameCS (
// argumentsCSopt )
//
case 126: {
PathNameCS pathNameCS = (PathNameCS) dtParser.getSym(1);
SimpleNameCS simpleNameCS = removeLastSimpleNameCS(pathNameCS);
OperationCallExpCS result = createDotOperationCallExpCS(null, pathNameCS, simpleNameCS, null, (EList) dtParser.getSym(3));
setOffsets(result, pathNameCS, getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 127: OperationCallExpCS ::= primaryExpCS .
// qualifiedPathNameCS isMarkedPreCSopt ( argumentsCSopt )
//
case 127: {
PathNameCS pathNameCS = (PathNameCS) dtParser.getSym(3);
SimpleNameCS simpleNameCS = removeLastSimpleNameCS(pathNameCS);
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
CallExpCS result = createDotOperationCallExpCS(source, pathNameCS, simpleNameCS, (IsMarkedPreCS) dtParser.getSym(4), (EList) dtParser.getSym(6));
setOffsets(result, source, getIToken(dtParser.getToken(7)));
dtParser.setSym1(result);
break;
}
//
// Rule 128: argumentsCS ::= OclExpressionCS
//
case 128: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 129: argumentsCS ::= argumentsCS , OclExpressionCS
//
case 129: {
EList result = (EList) dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 130: argumentsCSopt ::= $Empty
//
case 130:
dtParser.setSym1(new BasicEList());
break;
//
// Rule 132: isMarkedPreCSopt ::= $Empty
//
case 132: {
dtParser.setSym1(null);
break;
}
//
// Rule 133: PropertyCallExpCS ::= primaryExpCS .
// notReservedSimpleNameCS isMarkedPreCSopt
//
case 133: {
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
SimpleNameCS simpleNameCS = (SimpleNameCS) dtParser.getSym(3);
IsMarkedPreCS isMarkedPreCS = (IsMarkedPreCS) dtParser.getSym(4);
CSTNode result = createFeatureCallExpCS(source, null, simpleNameCS, new BasicEList(), isMarkedPreCS);
if (isMarkedPreCS != null) {
setOffsets(result, source, isMarkedPreCS);
} else {
setOffsets(result, source, simpleNameCS);
}
dtParser.setSym1(result);
break;
}
//
// Rule 134: PropertyCallExpCS ::= primaryExpCS .
// qualifiedPathNameCS isMarkedPreCSopt
//
case 134: {
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
PathNameCS pathNameCS = (PathNameCS) dtParser.getSym(3);
SimpleNameCS simpleNameCS = removeLastSimpleNameCS(pathNameCS);
IsMarkedPreCS isMarkedPreCS = (IsMarkedPreCS) dtParser.getSym(4);
CSTNode result = createFeatureCallExpCS(source, pathNameCS, simpleNameCS, new BasicEList(), isMarkedPreCS);
if (isMarkedPreCS != null) {
setOffsets(result, source, isMarkedPreCS);
} else {
setOffsets(result, source, simpleNameCS);
}
dtParser.setSym1(result);
break;
}
//
// Rule 135: PropertyCallExpCS ::= qualifiedPathNameCS
// isMarkedPreCSopt
//
case 135: {
PathNameCS pathNameCS = (PathNameCS) dtParser.getSym(1);
SimpleNameCS simpleNameCS = removeLastSimpleNameCS(pathNameCS);
IsMarkedPreCS isMarkedPreCS = (IsMarkedPreCS) dtParser.getSym(2);
CSTNode result = createFeatureCallExpCS(null, pathNameCS, simpleNameCS, new BasicEList(), isMarkedPreCS);
if (isMarkedPreCS != null) {
setOffsets(result, pathNameCS, isMarkedPreCS);
} else {
setOffsets(result, pathNameCS, simpleNameCS);
}
dtParser.setSym1(result);
break;
}
//
// Rule 136: AssociationClassCallExpCS ::=
// notLiteralNorReservedSimpleNameCS isMarkedPreCSopt
//
case 136: {
IsMarkedPreCS isMarkedPreCS = (IsMarkedPreCS) dtParser.getSym(2);
CSTNode result = createVariableExpCS((SimpleNameCS) dtParser.getSym(1), new BasicEList(), isMarkedPreCS);
if (isMarkedPreCS != null) {
setOffsets(result, (CSTNode) dtParser.getSym(1), (CSTNode) dtParser.getSym(2));
} else {
setOffsets(result, (CSTNode) dtParser.getSym(1));
}
dtParser.setSym1(result);
break;
}
//
// Rule 140: IterateExpCS ::= primaryExpCS -> iterateNameCS (
// VariableDeclarationCS | OclExpressionCS )
//
case 140: {
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
SimpleNameCS simpleNameCS = (SimpleNameCS) dtParser.getSym(3);
CSTNode result = createIterateExpCS(source, simpleNameCS, (VariableCS) dtParser.getSym(5), null, (OCLExpressionCS) dtParser.getSym(7));
setOffsets(result, source, getIToken(dtParser.getToken(8)));
dtParser.setSym1(result);
break;
}
//
// Rule 141: IterateExpCS ::= primaryExpCS -> iterateNameCS (
// VariableDeclarationCS ; VariableDeclarationCS | OclExpressionCS )
//
case 141: {
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
SimpleNameCS simpleNameCS = (SimpleNameCS) dtParser.getSym(3);
CSTNode result = createIterateExpCS(source, simpleNameCS, (VariableCS) dtParser.getSym(5), (VariableCS) dtParser.getSym(7), (OCLExpressionCS) dtParser.getSym(9));
setOffsets(result, source, getIToken(dtParser.getToken(10)));
dtParser.setSym1(result);
break;
}
//
// Rule 142: IteratorExpCS ::= primaryExpCS -> iteratorNameCS (
// OclExpressionCS )
//
case 142: {
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
SimpleNameCS simpleNameCS = (SimpleNameCS) dtParser.getSym(3);
CSTNode result = createIteratorExpCS(source, simpleNameCS, null, null, (OCLExpressionCS) dtParser.getSym(5));
setOffsets(result, source, getIToken(dtParser.getToken(6)));
dtParser.setSym1(result);
break;
}
//
// Rule 143: IteratorExpCS ::= primaryExpCS -> iteratorNameCS (
// VariableDeclarationCS | OclExpressionCS )
//
case 143: {
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
SimpleNameCS simpleNameCS = (SimpleNameCS) dtParser.getSym(3);
CSTNode result = createIteratorExpCS(source, simpleNameCS, (VariableCS) dtParser.getSym(5), null, (OCLExpressionCS) dtParser.getSym(7));
setOffsets(result, source, getIToken(dtParser.getToken(8)));
dtParser.setSym1(result);
break;
}
//
// Rule 144: IteratorExpCS ::= primaryExpCS -> iteratorNameCS (
// VariableDeclarationCS , VariableDeclarationCS | OclExpressionCS )
//
case 144: {
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
SimpleNameCS simpleNameCS = (SimpleNameCS) dtParser.getSym(3);
CSTNode result = createIteratorExpCS(source, simpleNameCS, (VariableCS) dtParser.getSym(5), (VariableCS) dtParser.getSym(7), (OCLExpressionCS) dtParser.getSym(9));
setOffsets(result, source, getIToken(dtParser.getToken(10)));
dtParser.setSym1(result);
break;
}
//
// Rule 149: LetExpCS ::= let variableDeclarationListCS in
// OclExpressionCS
//
case 149: {
OCLExpressionCS expr = (OCLExpressionCS) dtParser.getSym(4);
CSTNode result = createLetExpCS((EList) dtParser.getSym(2), expr);
setOffsets(result, getIToken(dtParser.getToken(1)), expr);
dtParser.setSym1(result);
break;
}
//
// Rule 154: impliesExpCS ::= impliesExpCS implies xorExpCS
//
case 154:
//
// Rule 155: impliesLetCS ::= impliesExpCS implies xorLetCS
//
case 155:
//
// Rule 158: xorExpCS ::= xorExpCS xor orExpCS
//
case 158:
//
// Rule 159: xorLetCS ::= xorExpCS xor orLetCS
//
case 159:
//
// Rule 162: orExpCS ::= orExpCS or andExpCS
//
case 162:
//
// Rule 163: orLetCS ::= orExpCS or andLetCS
//
case 163:
//
// Rule 166: andExpCS ::= andExpCS and equalityExpCS
//
case 166:
//
// Rule 167: andLetCS ::= andExpCS and equalityLetCS
//
case 167:
//
// Rule 170: equalityExpCS ::= equalityExpCS = relationalExpCS
//
case 170:
//
// Rule 171: equalityLetCS ::= equalityExpCS = relationalLetCS
//
case 171:
//
// Rule 172: equalityExpCS ::= equalityExpCS <> relationalExpCS
//
case 172:
//
// Rule 173: equalityLetCS ::= equalityExpCS <> relationalLetCS
//
case 173:
//
// Rule 176: relationalExpCS ::= relationalExpCS > additiveExpCS
//
case 176:
//
// Rule 177: relationalLetCS ::= relationalExpCS > additiveLetCS
//
case 177:
//
// Rule 178: relationalExpCS ::= relationalExpCS < additiveExpCS
//
case 178:
//
// Rule 179: relationalLetCS ::= relationalExpCS < additiveLetCS
//
case 179:
//
// Rule 180: relationalExpCS ::= relationalExpCS >= additiveExpCS
//
case 180:
//
// Rule 181: relationalLetCS ::= relationalExpCS >= additiveLetCS
//
case 181:
//
// Rule 182: relationalExpCS ::= relationalExpCS <= additiveExpCS
//
case 182:
//
// Rule 183: relationalLetCS ::= relationalExpCS <= additiveLetCS
//
case 183:
//
// Rule 186: additiveExpCS ::= additiveExpCS + multiplicativeExpCS
//
case 186:
//
// Rule 187: additiveLetCS ::= additiveExpCS + multiplicativeLetCS
//
case 187:
//
// Rule 188: additiveExpCS ::= additiveExpCS - multiplicativeExpCS
//
case 188:
//
// Rule 189: additiveLetCS ::= additiveExpCS - multiplicativeLetCS
//
case 189:
//
// Rule 192: multiplicativeExpCS ::= multiplicativeExpCS *
// unaryExpCS
//
case 192:
//
// Rule 193: multiplicativeLetCS ::= multiplicativeExpCS *
// unaryLetCS
//
case 193:
//
// Rule 194: multiplicativeExpCS ::= multiplicativeExpCS /
// unaryExpCS
//
case 194:
//
// Rule 195: multiplicativeLetCS ::= multiplicativeExpCS /
// unaryLetCS
//
case 195: {
SimpleNameCS simpleNameCS = createSimpleNameCS(SimpleTypeEnum.STRING_LITERAL, getTokenText(dtParser.getToken(2)));
setOffsets(simpleNameCS, getIToken(dtParser.getToken(2)));
OCLExpressionCS left = (OCLExpressionCS) dtParser.getSym(1);
OCLExpressionCS right = (OCLExpressionCS) dtParser.getSym(3);
EList args = new BasicEList();
args.add(right);
CSTNode result = createOperationCallExpCS(left, simpleNameCS, args);
setOffsets(result, left, right);
dtParser.setSym1(result);
break;
}
//
// Rule 198: unaryExpCS ::= - unaryExpCS
//
case 198:
//
// Rule 199: unaryLetCS ::= - unaryLetCS
//
case 199:
//
// Rule 200: unaryExpCS ::= not unaryExpCS
//
case 200:
//
// Rule 201: unaryLetCS ::= not unaryLetCS
//
case 201: {
SimpleNameCS simpleNameCS = createSimpleNameCS(SimpleTypeEnum.STRING_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
OCLExpressionCS expr = (OCLExpressionCS) dtParser.getSym(2);
CSTNode result = createOperationCallExpCS(expr, simpleNameCS, new BasicEList());
setOffsets(result, simpleNameCS, expr);
dtParser.setSym1(result);
break;
}
//
// Rule 205: primaryExpCS ::= ( OclExpressionCS )
//
case 205: {
CSTNode result = (CSTNode) dtParser.getSym(2);
if (result instanceof OperationCallExpCS) {
((OperationCallExpCS) result).setIsAtomic(true);
}
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(3)));
dtParser.setSym1(result);
break;
}
//
// Rule 208: declarator1 ::= IDENTIFIER : typeCS
//
case 208: {
CSTNode result = createVariableCS(getTokenText(dtParser.getToken(1)), (TypeCS) dtParser.getSym(3), null);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode) dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 209: declarator1 ::= IDENTIFIER : typeCS = OclExpressionCS
//
case 209: {
CSTNode result = createVariableCS(getTokenText(dtParser.getToken(1)), (TypeCS) dtParser.getSym(3), (OCLExpressionCS) dtParser.getSym(5));
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode) dtParser.getSym(5));
dtParser.setSym1(result);
break;
}
//
// Rule 210: declarator1 ::= IDENTIFIER : typeCS := OclExpressionCS
//
case 210: {
CSTNode result = createVariableCS(getTokenText(dtParser.getToken(1)), (TypeCS) dtParser.getSym(3), (OCLExpressionCS) dtParser.getSym(5));
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode) dtParser.getSym(5));
dtParser.setSym1(result);
break;
}
//
// Rule 211: declarator2 ::= IDENTIFIER := OclExpressionCS
//
case 211: {
CSTNode result = createVariableCS(getTokenText(dtParser.getToken(1)), null, (OCLExpressionCS) dtParser.getSym(3));
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode) dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 212: letExpSubCS3 ::= variableNameCS = OclExpressionCS
//
case 212: {
SimpleNameCS name = (SimpleNameCS) dtParser.getSym(1);
OCLExpressionCS initExpression = (OCLExpressionCS) dtParser.getSym(3);
VariableCS variableCS = createVariableCS(name, null, initExpression);
setOffsets(variableCS, name, initExpression);
EList result = new BasicEList();
result.add(variableCS);
dtParser.setSym1(result);
break;
}
//
// Rule 213: letExpSubCS3 ::= letExpSubCS3 , TupleLiteralPartCS
//
case 213: {
EList result = (EList) dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 214: LetExpCS ::= let letExpSubCS3 in OclExpressionCS
//
case 214: {
EList variables = (EList) dtParser.getSym(2);
CSTNode result = createLetExpCS(variables, (OCLExpressionCS) dtParser.getSym(4));
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode) dtParser.getSym(4));
dtParser.setSym1(result);
break;
}
//
// Rule 215: LetExpCS ::= let letExpSubCS3 in qvtErrorToken
//
case 215: {
EList variables = (EList) dtParser.getSym(2);
CSTNode result = createLetExpCS(variables, createSimpleNameCS(SimpleTypeEnum.IDENTIFIER_LITERAL, "") //$NON-NLS-1$
);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(3)));
dtParser.setSym1(result);
break;
}
//
// Rule 216: CallExpCS ::= . qvtErrorToken
//
case 216: {
CallExpCS result = TempFactory.eINSTANCE.createErrorCallExpCS();
result.setAccessor(DotOrArrowEnum.DOT_LITERAL);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 217: CallExpCS ::= -> qvtErrorToken
//
case 217: {
CallExpCS result = TempFactory.eINSTANCE.createErrorCallExpCS();
result.setAccessor(DotOrArrowEnum.ARROW_LITERAL);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 218: argumentsCS ::= qvtErrorToken
//
case 218:
dtParser.setSym1(new BasicEList());
break;
//
// Rule 220: IteratorExpCS ::= primaryExpCS -> iteratorNameCS (
// qvtErrorToken
//
case 220: {
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
SimpleNameCS simpleNameCS = (SimpleNameCS) dtParser.getSym(3);
CSTNode result = createIteratorExpCS(source, simpleNameCS, null, null, null);
setOffsets(result, source, getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 221: qvtErrorToken ::= ERROR_TOKEN
//
case 221: {
diagnozeErrorToken(dtParser.getToken(1));
break;
}
//
// Rule 222: equalityExpCS ::= equalityExpCS != relationalExpCS
//
case 222:
//
// Rule 223: equalityLetCS ::= equalityExpCS != relationalLetCS
//
case 223: {
SimpleNameCS simpleNameCS = createSimpleNameCS(SimpleTypeEnum.STRING_LITERAL, OCLStandardLibraryUtil.getOperationName(PredefinedType.NOT_EQUAL));
setOffsets(simpleNameCS, getIToken(dtParser.getToken(2)));
EList args = new BasicEList();
args.add(dtParser.getSym(3));
CSTNode result = createOperationCallExpCS((OCLExpressionCS) dtParser.getSym(1), simpleNameCS, args);
setOffsets(result, (CSTNode) dtParser.getSym(1), (CSTNode) dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 224: StringLiteralExpCS ::= StringLiteralExpCS
// STRING_LITERAL
//
case 224: {
IToken literalToken = getIToken(dtParser.getToken(2));
StringLiteralExpCS result = (StringLiteralExpCS) dtParser.getSym(1);
result.setSymbol(result.getSymbol() + literalToken.toString());
result.setStringSymbol(result.getStringSymbol() + literalToken.toString());
result.setUnescapedStringSymbol(result.getUnescapedStringSymbol() + unescape(literalToken));
int tokenLine = literalToken.getLine();
setOffsets(result, result, literalToken);
IToken prevToken = getParseStream().getTokenAt(literalToken.getTokenIndex() - 1);
int prevTokenLine = prevToken.getLine();
if (prevTokenLine == tokenLine) {
reportError(lpg.lpgjavaruntime.ParseErrorCodes.INVALID_CODE,
"", prevToken.getTokenIndex(), literalToken.getTokenIndex(), "Multiline string literals must be located in different lines!"); //$NON-NLS-1$ //$NON-NLS-2$
}
dtParser.setSym1(result);
break;
}
//
// Rule 226: listTypeCS ::= List ( typeCS )
//
case 226: {
CSTNode result = createListTypeCS((TypeCS) dtParser.getSym(3));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 227: listLiteralCS ::= List { CollectionLiteralPartsCSopt }
//
case 227: {
CSTNode result = createListLiteralExpCS((EList) dtParser.getSym(3));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 229: dictTypeCS ::= Dict ( typeCS , typeCS )
//
case 229: {
CSTNode result = createDictTypeCS((TypeCS) dtParser.getSym(3), (TypeCS) dtParser.getSym(5));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(6)));
dtParser.setSym1(result);
break;
}
//
// Rule 230: dictLiteralCS ::= Dict { dictLiteralPartListCSopt }
//
case 230: {
CSTNode result = createDictLiteralExpCS((EList<DictLiteralPartCS>) dtParser.getSym(3));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 235: dictLiteralPartCS ::= literalSimpleCS = OclExpressionCS
//
case 235: {
CSTNode result = createDictLiteralPartCS((LiteralExpCS) dtParser.getSym(1), (OCLExpressionCS) dtParser.getSym(3));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(3)));
dtParser.setSym1(result);
break;
}
//
// Rule 237: dictLiteralPartListCSopt ::= $Empty
//
case 237:
dtParser.setSym1(new BasicEList());
break;
//
// Rule 238: dictLiteralPartListCS ::= dictLiteralPartCS
//
case 238: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 239: dictLiteralPartListCS ::= dictLiteralPartListCS ,
// dictLiteralPartCS
//
case 239: {
EList result = (EList) dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 240: dictLiteralPartListCS ::= dictLiteralPartListCS
// qvtErrorToken
//
case 240: {
EList result = (EList) dtParser.getSym(1);
dtParser.setSym1(result);
break;
}
//
// Rule 242: IfExpCS ::= if OclExpressionCS then ifExpBodyCS else
// ifExpBodyCS endif
//
case 242: {
CSTNode result = createIfExpCS((OCLExpressionCS) dtParser.getSym(2), (OCLExpressionCS) dtParser.getSym(4), (OCLExpressionCS) dtParser.getSym(6));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(7)));
dtParser.setSym1(result);
break;
}
//
// Rule 243: IfExpCS ::= if OclExpressionCS then ifExpBodyCS endif
//
case 243: {
CSTNode result = createIfExpCS((OCLExpressionCS) dtParser.getSym(2), (OCLExpressionCS) dtParser.getSym(4), null);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(5)));
dtParser.setSym1(result);
break;
}
//
// Rule 244: IfExpCS ::= if OclExpressionCS then ifExpBodyCS else
// ifExpBodyCS qvtErrorToken
//
case 244: {
CSTNode result = createIfExpCS((OCLExpressionCS) dtParser.getSym(2), (OCLExpressionCS) dtParser.getSym(4), (OCLExpressionCS) dtParser.getSym(6));
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode) dtParser.getSym(6));
dtParser.setSym1(result);
break;
}
//
// Rule 245: IfExpCS ::= if OclExpressionCS then ifExpBodyCS else
// qvtErrorToken
//
case 245: {
CSTNode result = createIfExpCS((OCLExpressionCS) dtParser.getSym(2), (OCLExpressionCS) dtParser.getSym(4), null);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(5)));
dtParser.setSym1(result);
break;
}
//
// Rule 246: IfExpCS ::= if OclExpressionCS then ifExpBodyCS
// qvtErrorToken
//
case 246: {
CSTNode result = createIfExpCS((OCLExpressionCS) dtParser.getSym(2), (OCLExpressionCS) dtParser.getSym(4), null);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode) dtParser.getSym(4));
dtParser.setSym1(result);
break;
}
//
// Rule 247: IfExpCS ::= if OclExpressionCS then qvtErrorToken
//
case 247: {
CSTNode result = createIfExpCS((OCLExpressionCS) dtParser.getSym(2), null, null);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(3)));
dtParser.setSym1(result);
break;
}
//
// Rule 248: IfExpCS ::= if OclExpressionCS qvtErrorToken
//
case 248: {
CSTNode result = createIfExpCS((OCLExpressionCS) dtParser.getSym(2), null, null);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode) dtParser.getSym(2));
dtParser.setSym1(result);
break;
}
//
// Rule 249: IfExpCS ::= if qvtErrorToken
//
case 249: {
OCLExpressionCS invalidCondition = createInvalidLiteralExpCS(""); //$NON-NLS-1$
invalidCondition.setStartOffset(getIToken(dtParser.getToken(1)).getEndOffset());
invalidCondition.setEndOffset(getIToken(dtParser.getToken(1)).getEndOffset());
CSTNode result = createIfExpCS(invalidCondition, null, null);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 250: IterateExpCS ::= primaryExpCS -> imperativeIterateExpCS
//
case 250: {
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
ImperativeIterateExpCS iterateExpCS = (ImperativeIterateExpCS) dtParser.getSym(3);
iterateExpCS.setSource(source);
setOffsets(iterateExpCS, source, iterateExpCS);
dtParser.setSym1(iterateExpCS);
break;
}
//
// Rule 259: imperativeIterateExpCS ::=
// imperativeIteratorExpCSToken12 ( imperativeIterContents12 )
//
case 259:
//
// Rule 260: imperativeIterateExpCS ::=
// imperativeIteratorExpCSToken3 ( imperativeIterContents3 )
//
case 260: {
String opCode = getTokenText(dtParser.getToken(1));
SimpleNameCS simpleNameCS = createSimpleNameCS(SimpleTypeEnum.KEYWORD_LITERAL, opCode);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
Object[] iterContents = (Object[]) dtParser.getSym(3);
OCLExpressionCS bodyCS = null;
OCLExpressionCS conditionCS = null;
if ("xcollect".equals(opCode) || "collectOne".equals(opCode)) { //$NON-NLS-1$ //$NON-NLS-2$
bodyCS = (OCLExpressionCS) iterContents[2];
} else {
conditionCS = (OCLExpressionCS) iterContents[2];
}
CSTNode result = createImperativeIterateExpCS(simpleNameCS, (EList<VariableCS>) iterContents[0], (VariableCS) iterContents[1], bodyCS, conditionCS);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 261: imperativeIterateExpCS ::= imperativeIteratorExpCSToken
// qvtErrorToken
//
case 261: {
SimpleNameCS simpleNameCS = createSimpleNameCS(SimpleTypeEnum.KEYWORD_LITERAL, getTokenText(dtParser.getToken(1)));
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
CSTNode result = createImperativeIterateExpCS(simpleNameCS, ourEmptyEList, null, null, null);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 262: imperativeIterContents12 ::= OclExpressionCS
//
case 262: {
dtParser.setSym1(new Object[] { ourEmptyEList, null, dtParser.getSym(1) });
break;
}
//
// Rule 263: imperativeIterContents12 ::= variableDeclarationListCS
// | OclExpressionCS
//
case 263: {
dtParser.setSym1(new Object[] { dtParser.getSym(1), null, dtParser.getSym(3) });
break;
}
//
// Rule 264: imperativeIterContents3 ::= variableDeclarationListCS ;
// TupleLiteralPartCS | OclExpressionCS
//
case 264: {
dtParser.setSym1(new Object[] { dtParser.getSym(1), dtParser.getSym(3), dtParser.getSym(5) });
break;
}
//
// Rule 265: exclamationOpt ::= $Empty
//
case 265:
dtParser.setSym1(null);
break;
//
// Rule 267: declarator_vsep ::= IDENTIFIER |
//
case 267: {
CSTNode result = createVariableCS(getTokenText(dtParser.getToken(1)), null, null);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 268: declarator_vsepOpt ::= $Empty
//
case 268:
dtParser.setSym1(null);
break;
//
// Rule 270: IterateExpCS ::= primaryExpCS exclamationOpt [
// declarator_vsepOpt OclExpressionCS ]
//
case 270: {
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
if (source instanceof ImperativeIterateExpCS) {
String opCode = isTokenOfType(getIToken(dtParser.getToken(2)), XpandParsersym.TK_EXCLAMATION_MARK) ? "collectselectOne" : "collectselect"; //$NON-NLS-1$ //$NON-NLS-2$
SimpleNameCS simpleNameCS = createSimpleNameCS(SimpleTypeEnum.KEYWORD_LITERAL, opCode);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(3)), getIToken(dtParser.getToken(6)));
ImperativeIterateExpCS result = (ImperativeIterateExpCS) source;
result.setSimpleNameCS(simpleNameCS);
VariableCS variableCS = (VariableCS) dtParser.getSym(4);
if (variableCS != null) {
result.setTarget(variableCS);
}
result.setCondition((OCLExpressionCS) dtParser.getSym(5));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(6)));
dtParser.setSym1(result);
} else {
String opCode = isTokenOfType(getIToken(dtParser.getToken(2)), XpandParsersym.TK_EXCLAMATION_MARK) ? "selectOne" : "xselect"; //$NON-NLS-1$ //$NON-NLS-2$
SimpleNameCS simpleNameCS = createSimpleNameCS(SimpleTypeEnum.KEYWORD_LITERAL, opCode);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(3)), getIToken(dtParser.getToken(6)));
CallExpCS result = createImperativeIterateExpCS(simpleNameCS, ourEmptyEList, (VariableCS) dtParser.getSym(4), null, (OCLExpressionCS) dtParser.getSym(5));
result.setSource(source);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(6)));
dtParser.setSym1(result);
}
break;
}
//
// Rule 271: IterateExpCS ::= primaryExpCS ->
// notReservedSimpleNameCS
//
case 271: {
String opCode = "xcollect"; //$NON-NLS-1$
SimpleNameCS simpleNameCS = createSimpleNameCS(SimpleTypeEnum.KEYWORD_LITERAL, opCode);
OCLExpressionCS source = (OCLExpressionCS) dtParser.getSym(1);
SimpleNameCS featureNameCS = (SimpleNameCS) dtParser.getSym(3);
OCLExpressionCS featureCallExpCS = createFeatureCallExpCS(source, null, featureNameCS, new BasicEList(), null);
setOffsets(featureCallExpCS, source, featureNameCS);
ImperativeIterateExpCS result = createImperativeIterateExpCS(simpleNameCS, ourEmptyEList, null, null, null);
result.setSource(featureCallExpCS);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(3)));
dtParser.setSym1(result);
break;
}
//
// Rule 272: primaryExpCS ::= break
//
case 272: {
OCLExpressionCS result = createBreakCS();
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 273: primaryExpCS ::= continue
//
case 273: {
OCLExpressionCS result = createContinueCS();
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 274: template ::= emptyTemplate
//
case 274: {
setResult(xpandFactory.createTemplate(Collections.EMPTY_LIST, Collections.EMPTY_LIST, Collections.EMPTY_LIST, Collections.EMPTY_LIST, getRightIToken()));
break;
}
//
// Rule 277: template ::= LG commentTextPairAny imports
// extensionImports defineOrAroundSeq
//
case 277: {
List imports = (List) getRhsSym(3);
List extensionImports = (List) getRhsSym(4);
List defineOrAround = (List) getRhsSym(5);
List<Advice> advices = new LinkedList<Advice>();
List<Definition> defines = new LinkedList<Definition>();
for (Object o : defineOrAround) {
if (o instanceof Definition) {
defines.add((Definition) o);
} else if (o instanceof Advice) {
advices.add((Advice) o);
} else {
throw new IllegalStateException();// assert false?
}
}
setResult(xpandFactory.createTemplate(imports, extensionImports, defines, advices, getRightIToken()));
break;
}
//
// Rule 278: defineOrAroundSeq ::= define TEXT commentTextPairAny
// defineOrAroundSuffix
//
case 278: {
List result = new LinkedList();
result.add(getRhsSym(1));
result.addAll((List) getRhsSym(4));
setResult(result);
break;
}
//
// Rule 279: defineOrAroundSeq ::= around TEXT commentTextPairAny
// defineOrAroundSuffix
//
case 279: {
List result = new LinkedList();
result.add(getRhsSym(1));
result.addAll((List) getRhsSym(4));
setResult(result);
break;
}
//
// Rule 280: defineOrAroundSuffix ::= $Empty
//
case 280: {
setResult(Collections.EMPTY_LIST);
break;
}
//
// Rule 284: imports ::= $Empty
//
case 284: {
setResult(Collections.EMPTY_LIST);
break;
}
//
// Rule 285: imports ::= anImport imports
//
case 285: {
List res = new LinkedList();
res.add(getRhsSym(1));
res.addAll((List) getRhsSym(2));
setResult(res);
break;
}
//
// Rule 286: anImport ::= IMPORT StringLiteralExpCS TEXT
// commentTextPairAny
//
case 286: {
setResult(xpandFactory.createNamespaceImport(getLeftIToken(), (StringLiteralExpCS) getRhsSym(2)));
break;
}
//
// Rule 287: extensionImports ::= $Empty
//
case 287: {
setResult(Collections.EMPTY_LIST);
break;
}
//
// Rule 288: extensionImports ::= anExtensionImport extensionImports
//
case 288: {
List res = new LinkedList();
res.add(getRhsSym(1));
res.addAll((List) getRhsSym(2));
setResult(res);
break;
}
//
// Rule 289: anExtensionImport ::= EXTENSION pathNameCS TEXT
// commentTextPairAny
//
case 289: {
setResult(xpandFactory.createImportDeclaration(getLeftIToken(), (PathNameCS) getRhsSym(2)));
break;
}
//
// Rule 290: around ::= AROUND pointcut FOR typeCS sequence
// ENDAROUND
//
case 290: {
setResult(xpandFactory.createAround(getLeftIToken(), getRightIToken(), (Identifier) getRhsSym(2), Collections.<VariableCS> emptyList(), false, (TypeCS) getRhsSym(4), (List) getRhsSym(5)));
break;
}
//
// Rule 291: around ::= AROUND pointcut LPAREN parametersList RPAREN
// FOR typeCS sequence ENDAROUND
//
case 291: {
setResult(xpandFactory.createAround(getLeftIToken(), getRightIToken(), (Identifier) getRhsSym(2), (List<VariableCS>) getRhsSym(4), false, (TypeCS) getRhsSym(7), (List) getRhsSym(8)));
break;
}
//
// Rule 292: around ::= AROUND pointcut LPAREN parametersList COMMA
// MULTIPLY RPAREN FOR typeCS sequence ENDAROUND
//
case 292: {
setResult(xpandFactory.createAround(getLeftIToken(), getRightIToken(), (Identifier) getRhsSym(2), (List<VariableCS>) getRhsSym(4), true, (TypeCS) getRhsSym(9), (List) getRhsSym(10)));
break;
}
//
// Rule 293: around ::= AROUND pointcut LPAREN MULTIPLY RPAREN FOR
// typeCS sequence ENDAROUND
//
case 293: {
setResult(xpandFactory.createAround(getLeftIToken(), getRightIToken(), (Identifier) getRhsSym(2), Collections.<VariableCS> emptyList(), true, (TypeCS) getRhsSym(7), (List) getRhsSym(8)));
break;
}
//
// Rule 294: pointcut ::= MULTIPLY pointcutSuffix
//
case 294: {
// FIXME: may use SimpleNameCS here, though need more sophisticated
// code to update end position
// SimpleNameCS simpleNameCS =
// createSimpleNameCS(SimpleTypeEnum.IDENTIFIER_LITERAL,
// getTokenText(getRhsTokenIndex(1)));
// setOffsets(simpleNameCS, getLeftIToken());
Identifier res = xpandFactory.createIdentifier(getLeftIToken());
if (getRhsSym(2) != null) {
res = res.append((Identifier) getRhsSym(2));
}
setResult(res);
break;
}
//
// Rule 295: pointcut ::= IDENTIFIER pointcutSuffix
//
case 295: {
Identifier res = xpandFactory.createIdentifier(getLeftIToken());
if (getRhsSym(2) != null) {
res = res.append((Identifier) getRhsSym(2));
}
setResult(res);
break;
}
//
// Rule 296: pointcutSuffix ::= $Empty
//
case 296: {
setResult(null);
break;
}
//
// Rule 298: pointcutSuffix ::= COLONCOLON pointcutSuffix
//
case 298: {
Identifier res = xpandFactory.createIdentifier(getLeftIToken());
if (getRhsSym(2) != null) {
res = res.append((Identifier) getRhsSym(2));
}
setResult(res);
break;
}
//
// Rule 299: define ::= DEFINE IDENTIFIER FOR typeCS sequence
// ENDDEFINE
//
case 299: {
setResult(xpandFactory.createDefinition(getLeftIToken(), getRightIToken(), getRhsIToken(2), Collections.<VariableCS> emptyList(), (TypeCS) getRhsSym(4), (List) getRhsSym(5)));
break;
}
//
// Rule 300: define ::= DEFINE IDENTIFIER LPAREN parametersList
// RPAREN FOR typeCS sequence ENDDEFINE
//
case 300: {
setResult(xpandFactory.createDefinition(getLeftIToken(), getRightIToken(), getRhsIToken(2), (List<VariableCS>) getRhsSym(4), (TypeCS) getRhsSym(7), (List) getRhsSym(8)));
break;
}
//
// Rule 301: parametersList ::= parameter
//
case 301: {
VariableCS param = (VariableCS) getRhsSym(1);
LinkedList res = new LinkedList();
res.add(param);
setResult(res);
break;
}
//
// Rule 302: parametersList ::= parametersList , parameter
//
case 302: {
VariableCS param = (VariableCS) getRhsSym(3);
LinkedList res = new LinkedList();
res.addAll((List) getRhsSym(1));
res.add(param);
setResult(res);
break;
}
//
// Rule 304: parameter ::= typeCS IDENTIFIER
//
case 304: {
VariableCS result = createVariableCS(getRhsIToken(2).toString(), (TypeCS) getRhsSym(1), null);
setOffsets(result, (TypeCS) getRhsSym(1), getRhsIToken(2));
setResult(result);
break;
}
//
// Rule 305: sequence ::= text sequenceSuffix
//
case 305: {
List res = new LinkedList();
res.addAll((List) getRhsSym(1));
res.addAll((List) getRhsSym(2));
setResult(res);
break;
}
//
// Rule 306: sequenceSuffix ::= $Empty
//
case 306: {
setResult(Collections.EMPTY_LIST);
break;
}
//
// Rule 307: sequenceSuffix ::= statement text sequenceSuffix
//
case 307: {
List res = new LinkedList();
res.add(getRhsSym(1));
res.addAll((List) getRhsSym(2));
res.addAll((List) getRhsSym(3));
setResult(res);
break;
}
//
// Rule 314: text ::= minusOpt TEXT textSuffix
//
case 314: {
List res = new LinkedList();
res.add(xpandFactory.createTextStatement(getRhsIToken(2), (IToken) getRhsSym(1)));
res.addAll((List) getRhsSym(3));
setResult(res);
break;
}
//
// Rule 315: textSuffix ::= $Empty
//
case 315: {
setResult(Collections.EMPTY_LIST);
break;
}
//
// Rule 316: textSuffix ::= minusOpt TEXT textSuffix
//
case 316: {
List res = new LinkedList();
res.add(xpandFactory.createTextStatement(getRhsIToken(2), (IToken) getRhsSym(1)));
res.addAll((List) getRhsSym(3));
setResult(res);
break;
}
//
// Rule 317: minusOpt ::= $Empty
//
case 317: {
setResult(null);
break;
}
//
// Rule 318: minusOpt ::= MINUS
//
case 318: {
setResult(getLeftIToken());
break;
}
//
// Rule 322: errorStatement ::= ERROR OclExpressionCS
//
case 322: {
setResult(xpandFactory.createErrorStatement(getLeftIToken(), (OCLExpressionCS) getRhsSym(2)));
break;
}
//
// Rule 323: expandStatement ::= EXPAND definitionName
// parameterListOpt
//
case 323: {
setResult(xpandFactory.createExpandStatement(getLeftIToken(), (PathNameCS) getRhsSym(2), (List) getRhsSym(3), null, false, null));
break;
}
//
// Rule 324: expandStatement ::= EXPAND definitionName
// parameterListOpt FOR OclExpressionCS
//
case 324: {
setResult(xpandFactory.createExpandStatement(getLeftIToken(), (PathNameCS) getRhsSym(2), (List) getRhsSym(3), (OCLExpressionCS) getRhsSym(5), false, null));
break;
}
//
// Rule 325: expandStatement ::= EXPAND definitionName
// parameterListOpt FOREACH OclExpressionCS separatorOpt
//
case 325: {
setResult(xpandFactory.createExpandStatement(getLeftIToken(), (PathNameCS) getRhsSym(2), (List) getRhsSym(3), (OCLExpressionCS) getRhsSym(5), true, (OCLExpressionCS) getRhsSym(6)));
break;
}
//
// Rule 326: parameterListOpt ::= $Empty
//
case 326: {
setResult(Collections.EMPTY_LIST);
break;
}
//
// Rule 327: parameterListOpt ::= LPAREN argumentsCS RPAREN
//
case 327: {
setResult(getRhsSym(2));
break;
}
//
// Rule 329: expressionStmt ::= OclExpressionCS
//
case 329: {
// XXX OCL CST doesn't keep track of line numbers, but we use them
// (perhaps, might refactor to stop using?)
int lineNumber = getLeftIToken().getLine();
setResult(xpandFactory.createExpressionStatement((OCLExpressionCS) getRhsSym(1), lineNumber));
break;
}
//
// Rule 330: fileStatement ::= FILE OclExpressionCS identOpt
// sequence ENDFILE
//
case 330: {
setResult(xpandFactory.createFileStatement(getLeftIToken(), getRightIToken(), (OCLExpressionCS) getRhsSym(2), (Identifier) getRhsSym(3), (List) getRhsSym(4)));
break;
}
//
// Rule 331: identOpt ::= $Empty
//
case 331: {
setResult(null);
break;
}
//
// Rule 332: identOpt ::= IDENTIFIER
//
case 332: {
setResult(xpandFactory.createIdentifier(getLeftIToken()));
break;
}
//
// Rule 333: foreachStatement ::= FOREACH OclExpressionCS AS
// IDENTIFIER iteratorOpt separatorOpt sequence ENDFOREACH
//
case 333: {
setResult(xpandFactory.createForEachStatement(getLeftIToken(), getRightIToken(), (OCLExpressionCS) getRhsSym(2), getRhsIToken(4), (OCLExpressionCS) getRhsSym(6), (IToken) getRhsSym(5),
(List) getRhsSym(7)));
break;
}
//
// Rule 334: iteratorOpt ::= $Empty
//
case 334: {
setResult(null);
break;
}
//
// Rule 335: iteratorOpt ::= ITERATOR IDENTIFIER
//
case 335: {
setResult(getRightIToken());
break;
}
//
// Rule 336: separatorOpt ::= $Empty
//
case 336: {
setResult(null);
break;
}
//
// Rule 337: separatorOpt ::= SEPARATOR OclExpressionCS
//
case 337: {
setResult(getRhsSym(2));
break;
}
//
// Rule 338: ifStatement ::= IF OclExpressionCS sequence elseifAny
// elseOpt ENDIF
//
case 338: {
IfStatement i = xpandFactory.createIfStatement(getLeftIToken(), (OCLExpressionCS) getRhsSym(2), (List) getRhsSym(3), null);
IfStatement elseIf = (IfStatement) getRhsSym(4);
IfStatement elseStmt = (IfStatement) getRhsSym(5);
if (elseIf != null) {
i.setElseIf(elseIf);
IfStatement curElseIf = elseIf;
// get the latest one in the chain
while (curElseIf.getElseIf() != null) {
curElseIf = curElseIf.getElseIf();
}
curElseIf.setElseIf(elseStmt);
} else {
i.setElseIf(elseStmt);
}
setResult(i);
break;
}
//
// Rule 339: elseifAny ::= $Empty
//
case 339: {
setResult(null);
break;
}
//
// Rule 340: elseifAny ::= ELSEIF OclExpressionCS sequence elseifAny
//
case 340: {
IfStatement elseIf = xpandFactory.createIfStatement(getLeftIToken(), (OCLExpressionCS) getRhsSym(2), (List) getRhsSym(3), null);
IfStatement restElseIf = (IfStatement) getRhsSym(4);
elseIf.setElseIf(restElseIf);
setResult(elseIf);
break;
}
//
// Rule 341: elseOpt ::= $Empty
//
case 341: {
setResult(null);
break;
}
//
// Rule 342: elseOpt ::= ELSE sequence
//
case 342: {
setResult(xpandFactory.createIfStatement(getLeftIToken(), null, (List) getRhsSym(2), null));
break;
}
//
// Rule 343: letStatement ::= LET OclExpressionCS AS IDENTIFIER
// sequence ENDLET
//
case 343: {
setResult(xpandFactory.createLetStatement(getLeftIToken(), getRightIToken(), (OCLExpressionCS) getRhsSym(2), getRhsIToken(4), (List) getRhsSym(5)));
break;
}
//
// Rule 344: protectStatement ::= PROTECT CSTART OclExpressionCS
// CEND OclExpressionCS ID OclExpressionCS disabledOpt sequence
// ENDPROTECT
//
case 344: {
setResult(xpandFactory.createProtectStatement(getLeftIToken(), getRightIToken(), (OCLExpressionCS) getRhsSym(3), (OCLExpressionCS) getRhsSym(5), (OCLExpressionCS) getRhsSym(7),
(IToken) getRhsSym(8), (List) getRhsSym(9)));
break;
}
//
// Rule 345: disabledOpt ::= $Empty
//
case 345: {
setResult(null);
break;
}
//
// Rule 346: disabledOpt ::= DISABLE
//
case 346: {
setResult(getLeftIToken());
break;
}
default:
break;
}
return;
}
}