blob: 5825288d112e8c5a70051df3f2bf776652d55b72 [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2005, 2008 IBM 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:
* IBM - Initial API and implementation
* E.D.Willink - Elimination of some shift-reduce conflicts
* E.D.Willink - Remove unnecessary warning suppression
* E.D.Willink - 225493 Need ability to set CSTNode offsets
*
* </copyright>
*
* $Id: OCLParser.java,v 1.3 2008/04/03 13:00:10 cdamus Exp $
*/
package org.eclipse.ocl.parser;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.ocl.cst.CSTNode;
import org.eclipse.ocl.cst.CallExpCS;
import org.eclipse.ocl.cst.CollectionTypeIdentifierEnum;
import org.eclipse.ocl.cst.DotOrArrowEnum;
import org.eclipse.ocl.cst.IntegerLiteralExpCS;
import org.eclipse.ocl.cst.IsMarkedPreCS;
import org.eclipse.ocl.cst.MessageExpCS;
import org.eclipse.ocl.cst.OCLExpressionCS;
import org.eclipse.ocl.cst.OCLMessageArgCS;
import org.eclipse.ocl.cst.OperationCallExpCS;
import org.eclipse.ocl.cst.PathNameCS;
import org.eclipse.ocl.cst.SimpleNameCS;
import org.eclipse.ocl.cst.SimpleTypeEnum;
import org.eclipse.ocl.cst.StateExpCS;
import org.eclipse.ocl.cst.TypeCS;
import org.eclipse.ocl.cst.VariableCS;
import org.eclipse.ocl.util.OCLStandardLibraryUtil;
import org.eclipse.ocl.utilities.PredefinedType;
import lpg.lpgjavaruntime.BadParseException;
import lpg.lpgjavaruntime.BadParseSymFileException;
import lpg.lpgjavaruntime.DeterministicParser;
import lpg.lpgjavaruntime.DiagnoseParser;
import lpg.lpgjavaruntime.IToken;
import lpg.lpgjavaruntime.Monitor;
import lpg.lpgjavaruntime.NotDeterministicParseTableException;
import lpg.lpgjavaruntime.ParseTable;
import lpg.lpgjavaruntime.RuleAction;
import org.eclipse.ocl.Environment;
import org.eclipse.ocl.cst.DefExpressionCS;
import org.eclipse.ocl.cst.InitOrDerValueCS;
import org.eclipse.ocl.cst.InvOrDefCS;
import org.eclipse.ocl.cst.OperationCS;
import org.eclipse.ocl.cst.PackageDeclarationCS;
import org.eclipse.ocl.cst.PrePostOrBodyEnum;
public class OCLParser extends AbstractOCLParser implements RuleAction
{
protected static ParseTable prs = new OCLParserprs();
private DeterministicParser dtParser;
public OCLParser(OCLLexer lexer) {
super(lexer);
}
public int getEOFTokenKind() { return OCLParserprs.EOFT_SYMBOL; }
public Environment<?,?,?,?,?,?,?,?,?,?,?,?> getOCLEnvironment() {
return getLexer().getOCLEnvironment();
}
@Override
public OCLLexer getLexer() {
return (OCLLexer)super.getLexer();
}
public String getTokenKindName(int kind) { return OCLParsersym.orderedTerminalSymbols[kind]; }
@Override
public String[] orderedTerminalSymbols() { return OCLParsersym.orderedTerminalSymbols; }
@SuppressWarnings("nls")
@Override
public CSTNode parseTokensToCST(Monitor monitor, int error_repair_count) {
ParseTable prsTable = new OCLParserprs();
try {
dtParser = new DeterministicParser(monitor, this, prsTable, this);
}
catch (NotDeterministicParseTableException e) {
throw new RuntimeException("****Error: Regenerate OCLParserprs.java with -NOBACKTRACK option");
}
catch (BadParseSymFileException e) {
throw new RuntimeException("****Error: Bad Parser Symbol File -- OCLParsersym.java. Regenerate OCLParserprs.java");
}
try {
return (CSTNode) dtParser.parse();
}
catch (BadParseException e) {
reset(e.error_token); // point to error token
DiagnoseParser diagnoseParser = new DiagnoseParser(this, prsTable);
diagnoseParser.diagnose(e.error_token);
}
return null;
}
/**
* Initializes a concrete-syntax node's start and end offsets from the
* current token in the parser stream.
*
* @param cstNode a concrete-syntax node
*
* @since 1.2
*/
protected void setOffsets(CSTNode cstNode) {
IToken firstToken = getIToken(dtParser.getToken(1));
cstNode.setStartOffset(firstToken.getStartOffset());
cstNode.setEndOffset(firstToken.getEndOffset()-1);
}
@SuppressWarnings("unchecked")
public void ruleAction(int ruleNumber)
{
switch (ruleNumber) {
//
// Rule 26: operationCS1 ::= IDENTIFIER ( parametersCSopt ) : typeCSopt
//
case 26: {
CSTNode result = createOperationCS(
getTokenText(dtParser.getToken(1)),
(EList)dtParser.getSym(3),
(TypeCS)dtParser.getSym(6)
);
if (dtParser.getSym(6) != null) {
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(6));
} else {
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(5)));
}
dtParser.setSym1(result);
break;
}
//
// Rule 27: operationCS2 ::= pathNameCS :: simpleNameCS ( parametersCSopt ) : typeCSopt
//
case 27: {
CSTNode result = createOperationCS(
(PathNameCS)dtParser.getSym(1),
(SimpleNameCS)dtParser.getSym(3),
(EList)dtParser.getSym(5),
(TypeCS)dtParser.getSym(8)
);
if (dtParser.getSym(8) != null) {
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(8));
} else {
setOffsets(result, (CSTNode)dtParser.getSym(1), getIToken(dtParser.getToken(7)));
}
dtParser.setSym1(result);
break;
}
//
// Rule 28: parametersCSopt ::= $Empty
//
case 28:
dtParser.setSym1(new BasicEList());
break;
//
// Rule 30: parametersCS ::= variableCS
//
case 30: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 31: parametersCS ::= parametersCS , variableCS
//
case 31: {
EList result = (EList)dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 32: simpleNameCSopt ::= $Empty
//
case 32:
dtParser.setSym1(null);
break;
//
// Rule 38: impliesExpCS ::= impliesExpCS implies andOrXorExpCS
//
case 38:
//
// Rule 39: impliesWithLet ::= impliesExpCS implies andOrXorWithLet
//
case 39:
//
// Rule 42: andOrXorExpCS ::= andOrXorExpCS and equalityExpCS
//
case 42:
//
// Rule 43: andOrXorExpCS ::= andOrXorExpCS or equalityExpCS
//
case 43:
//
// Rule 44: andOrXorExpCS ::= andOrXorExpCS xor equalityExpCS
//
case 44:
//
// Rule 45: andOrXorWithLet ::= andOrXorExpCS and equalityWithLet
//
case 45:
//
// Rule 46: andOrXorWithLet ::= andOrXorExpCS or equalityWithLet
//
case 46:
//
// Rule 47: andOrXorWithLet ::= andOrXorExpCS xor equalityWithLet
//
case 47: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.STRING_LITERAL,
getTokenText(dtParser.getToken(2))
);
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 50: equalityExpCS ::= equalityExpCS = relationalExpCS
//
case 50:
//
// Rule 51: equalityWithLet ::= equalityExpCS = relationalWithLet
//
case 51: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.STRING_LITERAL,
OCLStandardLibraryUtil.getOperationName(PredefinedType.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 52: equalityExpCS ::= equalityExpCS <> relationalExpCS
//
case 52:
//
// Rule 53: equalityWithLet ::= equalityExpCS <> relationalWithLet
//
case 53: {
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 56: relationalExpCS ::= relationalExpCS > ifExpCSPrec
//
case 56:
//
// Rule 57: relationalWithLet ::= relationalExpCS > additiveWithLet
//
case 57: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.STRING_LITERAL,
OCLStandardLibraryUtil.getOperationName(PredefinedType.GREATER_THAN)
);
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 58: relationalExpCS ::= relationalExpCS < ifExpCSPrec
//
case 58:
//
// Rule 59: relationalWithLet ::= relationalExpCS < additiveWithLet
//
case 59: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.STRING_LITERAL,
OCLStandardLibraryUtil.getOperationName(PredefinedType.LESS_THAN)
);
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 60: relationalExpCS ::= relationalExpCS >= ifExpCSPrec
//
case 60:
//
// Rule 61: relationalWithLet ::= relationalExpCS >= additiveWithLet
//
case 61: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.STRING_LITERAL,
OCLStandardLibraryUtil.getOperationName(PredefinedType.GREATER_THAN_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 62: relationalExpCS ::= relationalExpCS <= ifExpCSPrec
//
case 62:
//
// Rule 63: relationalWithLet ::= relationalExpCS <= additiveWithLet
//
case 63: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.STRING_LITERAL,
OCLStandardLibraryUtil.getOperationName(PredefinedType.LESS_THAN_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 68: additiveExpCS ::= additiveExpCS + multiplicativeExpCS
//
case 68:
//
// Rule 69: additiveWithLet ::= additiveExpCS + multiplicativeWithLet
//
case 69: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.STRING_LITERAL,
OCLStandardLibraryUtil.getOperationName(PredefinedType.PLUS)
);
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 70: additiveExpCS ::= additiveExpCS - multiplicativeExpCS
//
case 70:
//
// Rule 71: additiveWithLet ::= additiveExpCS - multiplicativeWithLet
//
case 71: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.STRING_LITERAL,
OCLStandardLibraryUtil.getOperationName(PredefinedType.MINUS)
);
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 74: multiplicativeExpCS ::= multiplicativeExpCS * unaryExpCS
//
case 74:
//
// Rule 75: multiplicativeWithLet ::= multiplicativeExpCS * unaryWithLet
//
case 75: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.STRING_LITERAL,
OCLStandardLibraryUtil.getOperationName(PredefinedType.TIMES)
);
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 76: multiplicativeExpCS ::= multiplicativeExpCS / unaryExpCS
//
case 76:
//
// Rule 77: multiplicativeWithLet ::= multiplicativeExpCS / unaryWithLet
//
case 77: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.STRING_LITERAL,
OCLStandardLibraryUtil.getOperationName(PredefinedType.DIVIDE)
);
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 80: unaryExpCS ::= - unaryExpCS
//
case 80: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.STRING_LITERAL,
OCLStandardLibraryUtil.getOperationName(PredefinedType.MINUS)
);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
CSTNode result = createOperationCallExpCS(
(OCLExpressionCS)dtParser.getSym(2),
simpleNameCS,
new BasicEList()
);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(2));
dtParser.setSym1(result);
break;
}
//
// Rule 81: unaryExpCS ::= not unaryExpCS
//
case 81: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.STRING_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
CSTNode result = createOperationCallExpCS(
(OCLExpressionCS)dtParser.getSym(2),
simpleNameCS,
new BasicEList()
);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(2));
dtParser.setSym1(result);
break;
}
//
// Rule 83: dotArrowExpCS ::= dotArrowExpCS callExpCS
//
case 83: {
CallExpCS result = (CallExpCS)dtParser.getSym(2);
result.setSource((OCLExpressionCS)dtParser.getSym(1));
setOffsets(result, (CSTNode)dtParser.getSym(1), result);
dtParser.setSym1(result);
break;
}
//
// Rule 84: dotArrowExpCS ::= dotArrowExpCS messageExpCS
//
case 84: {
MessageExpCS result = (MessageExpCS)dtParser.getSym(2);
result.setTarget((OCLExpressionCS)dtParser.getSym(1));
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(2));
dtParser.setSym1(result);
break;
}
//
// Rule 85: dotArrowExpCS ::= NUMERIC_OPERATION ( argumentsCSopt )
//
case 85: {
// NUMERIC_OPERATION -> Integer '.' Identifier
String text = getTokenText(dtParser.getToken(1));
int index = text.indexOf('.');
String integer = text.substring(0, index);
String simpleName = text.substring(index + 1);
// create the IntegerLiteralExpCS
int startOffset = getIToken(dtParser.getToken(1)).getStartOffset();
int endOffset = startOffset + integer.length() - 1; // inclusive
IntegerLiteralExpCS integerLiteralExpCS = createIntegerLiteralExpCS(integer);
integerLiteralExpCS.setStartOffset(startOffset);
integerLiteralExpCS.setEndOffset(endOffset);
startOffset = endOffset + 2; // end of integerLiteral + 1('.') + 1(start of simpleName)
endOffset = getIToken(dtParser.getToken(1)).getEndOffset();
// create the SimpleNameCS
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.IDENTIFIER_LITERAL,
simpleName
);
simpleNameCS.setStartOffset(startOffset);
simpleNameCS.setEndOffset(endOffset);
// create the OperationCallExpCS
CSTNode result = createOperationCallExpCS(
integerLiteralExpCS,
simpleNameCS,
(EList)dtParser.getSym(3)
);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 86: dotArrowExpCS ::= pathNameCS :: simpleNameCS ( argumentsCSopt )
//
case 86: {
OperationCallExpCS result = createOperationCallExpCS(
(PathNameCS)dtParser.getSym(1),
(SimpleNameCS)dtParser.getSym(3),
(EList)dtParser.getSym(5)
);
setOffsets(result, (CSTNode)dtParser.getSym(1), getIToken(dtParser.getToken(6)));
result.setAccessor(DotOrArrowEnum.DOT_LITERAL);
dtParser.setSym1(result);
break;
}
//
// Rule 91: oclExpCS ::= ( oclExpressionCS )
//
case 91: {
CSTNode result = (CSTNode)dtParser.getSym(2);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(3)));
dtParser.setSym1(result);
break;
}
//
// Rule 92: variableExpCS ::= simpleNameCS isMarkedPreCS
//
case 92: {
IsMarkedPreCS isMarkedPreCS = (IsMarkedPreCS)dtParser.getSym(2);
CSTNode result = createVariableExpCS(
(SimpleNameCS)dtParser.getSym(1),
new BasicEList(),
isMarkedPreCS
);
if (isMarkedPreCS.isPre()) {
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(2));
} else {
setOffsets(result, (CSTNode)dtParser.getSym(1));
}
dtParser.setSym1(result);
break;
}
//
// Rule 93: variableExpCS ::= keywordAsIdentifier1 isMarkedPreCS
//
case 93: {
IsMarkedPreCS isMarkedPreCS = (IsMarkedPreCS)dtParser.getSym(2);
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.IDENTIFIER_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
CSTNode result = createVariableExpCS(
simpleNameCS,
new BasicEList(),
isMarkedPreCS
);
if (isMarkedPreCS.isPre()) {
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(2));
} else {
setOffsets(result, getIToken(dtParser.getToken(1)));
}
dtParser.setSym1(result);
break;
}
//
// Rule 94: variableExpCS ::= simpleNameCS [ argumentsCS ] isMarkedPreCS
//
case 94: {
IsMarkedPreCS isMarkedPreCS = (IsMarkedPreCS)dtParser.getSym(5);
CSTNode result = createVariableExpCS(
(SimpleNameCS)dtParser.getSym(1),
(EList)dtParser.getSym(3),
isMarkedPreCS
);
if (isMarkedPreCS.isPre()) {
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(5));
} else {
setOffsets(result, (CSTNode)dtParser.getSym(1), getIToken(dtParser.getToken(4)));
}
dtParser.setSym1(result);
break;
}
//
// Rule 95: variableExpCS ::= keywordAsIdentifier1 [ argumentsCS ] isMarkedPreCS
//
case 95: {
IsMarkedPreCS isMarkedPreCS = (IsMarkedPreCS)dtParser.getSym(5);
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.IDENTIFIER_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
CSTNode result = createVariableExpCS(
(SimpleNameCS)dtParser.getSym(1),
(EList)dtParser.getSym(3),
isMarkedPreCS
);
if (isMarkedPreCS.isPre()) {
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(5));
} else {
setOffsets(result, (CSTNode)dtParser.getSym(1), getIToken(dtParser.getToken(4)));
}
dtParser.setSym1(result);
break;
}
//
// Rule 97: simpleNameCS ::= self
//
case 97: {
CSTNode result = createSimpleNameCS(
SimpleTypeEnum.SELF_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 98: simpleNameCS ::= IDENTIFIER
//
case 98: {
CSTNode result = createSimpleNameCS(
SimpleTypeEnum.IDENTIFIER_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 99: primitiveTypeCS ::= Integer
//
case 99: {
CSTNode result = createPrimitiveTypeCS(
SimpleTypeEnum.INTEGER_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 100: primitiveTypeCS ::= UnlimitedNatural
//
case 100: {
CSTNode result = createPrimitiveTypeCS(
SimpleTypeEnum.UNLIMITED_NATURAL_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 101: primitiveTypeCS ::= String
//
case 101: {
CSTNode result = createPrimitiveTypeCS(
SimpleTypeEnum.STRING_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 102: primitiveTypeCS ::= Real
//
case 102: {
CSTNode result = createPrimitiveTypeCS(
SimpleTypeEnum.REAL_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 103: primitiveTypeCS ::= Boolean
//
case 103: {
CSTNode result = createPrimitiveTypeCS(
SimpleTypeEnum.BOOLEAN_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 104: primitiveTypeCS ::= OclAny
//
case 104: {
CSTNode result = createPrimitiveTypeCS(
SimpleTypeEnum.OCL_ANY_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 105: primitiveTypeCS ::= OclVoid
//
case 105: {
CSTNode result = createPrimitiveTypeCS(
SimpleTypeEnum.OCL_VOID_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 106: primitiveTypeCS ::= Invalid
//
case 106: {
CSTNode result = createPrimitiveTypeCS(
SimpleTypeEnum.INVALID_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 107: primitiveTypeCS ::= OclMessage
//
case 107: {
CSTNode result = createPrimitiveTypeCS(
SimpleTypeEnum.OCL_MESSAGE_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 108: pathNameCS ::= IDENTIFIER
//
case 108: {
CSTNode result = createPathNameCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 109: pathNameCS ::= pathNameCS :: simpleNameCS
//
case 109: {
PathNameCS result = (PathNameCS)dtParser.getSym(1);
result = extendPathNameCS(result, getTokenText(dtParser.getToken(3)));
setOffsets(result, result, (CSTNode)dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 110: pathNameCSOpt ::= $Empty
//
case 110: {
CSTNode result = createPathNameCS();
dtParser.setSym1(result);
break;
}
//
// Rule 118: enumLiteralExpCS ::= pathNameCS :: keywordAsIdentifier
//
case 118: {
CSTNode result = createEnumLiteralExpCS(
(PathNameCS)dtParser.getSym(1),
getTokenText(dtParser.getToken(3))
);
setOffsets(result, (CSTNode)dtParser.getSym(1), getIToken(dtParser.getToken(3)));
dtParser.setSym1(result);
break;
}
//
// Rule 119: enumLiteralExpCS ::= pathNameCS :: simpleNameCS
//
case 119: {
CSTNode result = createEnumLiteralExpCS(
(PathNameCS)dtParser.getSym(1),
(SimpleNameCS)dtParser.getSym(3)
);
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 120: collectionLiteralExpCS ::= collectionTypeIdentifierCS { collectionLiteralPartsCSopt }
//
case 120: {
Object[] objs = (Object[])dtParser.getSym(1);
CSTNode result = createCollectionLiteralExpCS(
(CollectionTypeIdentifierEnum)objs[1],
(EList)dtParser.getSym(3)
);
setOffsets(result, (IToken)objs[0], getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 121: collectionTypeIdentifierCS ::= Set
//
case 121: {
dtParser.setSym1(new Object[]{getIToken(dtParser.getToken(1)), CollectionTypeIdentifierEnum.SET_LITERAL});
break;
}
//
// Rule 122: collectionTypeIdentifierCS ::= Bag
//
case 122: {
dtParser.setSym1(new Object[]{getIToken(dtParser.getToken(1)), CollectionTypeIdentifierEnum.BAG_LITERAL});
break;
}
//
// Rule 123: collectionTypeIdentifierCS ::= Sequence
//
case 123: {
dtParser.setSym1(new Object[]{getIToken(dtParser.getToken(1)), CollectionTypeIdentifierEnum.SEQUENCE_LITERAL});
break;
}
//
// Rule 124: collectionTypeIdentifierCS ::= Collection
//
case 124: {
dtParser.setSym1(new Object[]{getIToken(dtParser.getToken(1)), CollectionTypeIdentifierEnum.COLLECTION_LITERAL});
break;
}
//
// Rule 125: collectionTypeIdentifierCS ::= OrderedSet
//
case 125: {
dtParser.setSym1(new Object[]{getIToken(dtParser.getToken(1)), CollectionTypeIdentifierEnum.ORDERED_SET_LITERAL});
break;
}
//
// Rule 126: collectionLiteralPartsCSopt ::= $Empty
//
case 126:
dtParser.setSym1(new BasicEList());
break;
//
// Rule 128: collectionLiteralPartsCS ::= collectionLiteralPartCS
//
case 128: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 129: collectionLiteralPartsCS ::= collectionLiteralPartsCS , collectionLiteralPartCS
//
case 129: {
EList result = (EList)dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 131: collectionLiteralPartCS ::= oclExpressionCS
//
case 131: {
CSTNode result = createCollectionLiteralPartCS(
(OCLExpressionCS)dtParser.getSym(1)
);
setOffsets(result, (CSTNode)dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 132: collectionRangeCS ::= - INTEGER_RANGE_START oclExpressionCS
//
case 132: {
OCLExpressionCS rangeStart = createRangeStart(
getTokenText(dtParser.getToken(2)), true);
CSTNode result = createCollectionRangeCS(
rangeStart,
(OCLExpressionCS)dtParser.getSym(3)
);
setOffsets(result, rangeStart, (CSTNode)dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 133: collectionRangeCS ::= INTEGER_RANGE_START oclExpressionCS
//
case 133: {
OCLExpressionCS rangeStart = createRangeStart(
getTokenText(dtParser.getToken(1)), false);
CSTNode result = createCollectionRangeCS(
rangeStart,
(OCLExpressionCS)dtParser.getSym(2)
);
setOffsets(result, rangeStart, (CSTNode)dtParser.getSym(2));
dtParser.setSym1(result);
break;
}
//
// Rule 134: collectionRangeCS ::= oclExpressionCS .. oclExpressionCS
//
case 134: {
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 140: tupleLiteralExpCS ::= Tuple { variableListCS2 }
//
case 140: {
CSTNode result = createTupleLiteralExpCS((EList)dtParser.getSym(3));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 141: integerLiteralExpCS ::= INTEGER_LITERAL
//
case 141: {
CSTNode result = createIntegerLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 142: unlimitedNaturalLiteralExpCS ::= *
//
case 142: {
CSTNode result = createUnlimitedNaturalLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 143: realLiteralExpCS ::= REAL_LITERAL
//
case 143: {
CSTNode result = createRealLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 144: stringLiteralExpCS ::= STRING_LITERAL
//
case 144: {
CSTNode result = createStringLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 145: booleanLiteralExpCS ::= true
//
case 145: {
CSTNode result = createBooleanLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 146: booleanLiteralExpCS ::= false
//
case 146: {
CSTNode result = createBooleanLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 147: nullLiteralExpCS ::= null
//
case 147: {
CSTNode result = createNullLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 148: invalidLiteralExpCS ::= OclInvalid
//
case 148: {
CSTNode result = createInvalidLiteralExpCS(getTokenText(dtParser.getToken(1)));
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 149: callExpCS ::= -> featureCallExpCS
//
case 149:
//
// Rule 150: callExpCS ::= -> loopExpCS
//
case 150: {
CallExpCS result = (CallExpCS)dtParser.getSym(2);
result.setAccessor(DotOrArrowEnum.ARROW_LITERAL);
dtParser.setSym1(result);
break;
}
//
// Rule 151: callExpCS ::= . keywordOperationCallExpCS
//
case 151:
//
// Rule 152: callExpCS ::= . featureCallExpCS
//
case 152: {
CallExpCS result = (CallExpCS)dtParser.getSym(2);
result.setAccessor(DotOrArrowEnum.DOT_LITERAL);
dtParser.setSym1(result);
break;
}
//
// Rule 155: iteratorExpCS ::= forAll ( iterContents )
//
case 155:
//
// Rule 156: iteratorExpCS ::= exists ( iterContents )
//
case 156:
//
// Rule 157: iteratorExpCS ::= isUnique ( iterContents )
//
case 157:
//
// Rule 158: iteratorExpCS ::= one ( iterContents )
//
case 158:
//
// Rule 159: iteratorExpCS ::= any ( iterContents )
//
case 159:
//
// Rule 160: iteratorExpCS ::= collect ( iterContents )
//
case 160:
//
// Rule 161: iteratorExpCS ::= select ( iterContents )
//
case 161:
//
// Rule 162: iteratorExpCS ::= reject ( iterContents )
//
case 162:
//
// Rule 163: iteratorExpCS ::= collectNested ( iterContents )
//
case 163:
//
// Rule 164: iteratorExpCS ::= sortedBy ( iterContents )
//
case 164:
//
// Rule 165: iteratorExpCS ::= closure ( iterContents )
//
case 165: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.KEYWORD_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
Object[] iterContents = (Object[])dtParser.getSym(3);
CSTNode result = createIteratorExpCS(
simpleNameCS,
(VariableCS)iterContents[0],
(VariableCS)iterContents[1],
(OCLExpressionCS)iterContents[2]
);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 166: iterContents ::= oclExpressionCS
//
case 166: {
dtParser.setSym1(new Object[] {
null,
null,
dtParser.getSym(1)
});
break;
}
//
// Rule 167: iterContents ::= variableCS | oclExpressionCS
//
case 167: {
dtParser.setSym1(new Object[] {
dtParser.getSym(1),
null,
dtParser.getSym(3)
});
break;
}
//
// Rule 168: iterContents ::= variableCS , variableCS | oclExpressionCS
//
case 168: {
dtParser.setSym1(new Object[] {
dtParser.getSym(1),
dtParser.getSym(3),
dtParser.getSym(5)
});
break;
}
//
// Rule 169: iterateExpCS ::= iterate ( variableCS | oclExpressionCS )
//
case 169: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.KEYWORD_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
CSTNode result = createIterateExpCS(
simpleNameCS,
(VariableCS)dtParser.getSym(3),
null,
(OCLExpressionCS)dtParser.getSym(5)
);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(6)));
dtParser.setSym1(result);
break;
}
//
// Rule 170: iterateExpCS ::= iterate ( variableCS ; variableCS | oclExpressionCS )
//
case 170: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.KEYWORD_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
CSTNode result = createIterateExpCS(
simpleNameCS,
(VariableCS)dtParser.getSym(3),
(VariableCS)dtParser.getSym(5),
(OCLExpressionCS)dtParser.getSym(7)
);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(8)));
dtParser.setSym1(result);
break;
}
//
// Rule 171: variableCS ::= IDENTIFIER
//
case 171: {
CSTNode result = createVariableCS(
getTokenText(dtParser.getToken(1)),
null,
null
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 172: variableCS ::= IDENTIFIER : typeCS
//
case 172: {
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 173: variableCS ::= IDENTIFIER : typeCS = oclExpressionCS
//
case 173: {
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 174: variableCS2 ::= IDENTIFIER = oclExpressionCS
//
case 174: {
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 175: typeCSopt ::= $Empty
//
case 175:
dtParser.setSym1(null);
break;
//
// Rule 181: collectionTypeCS ::= collectionTypeIdentifierCS ( typeCS )
//
case 181: {
Object[] objs = (Object[])dtParser.getSym(1);
CSTNode result = createCollectionTypeCS(
(CollectionTypeIdentifierEnum)objs[1],
(TypeCS)dtParser.getSym(3)
);
setOffsets(result, (IToken)objs[0], getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 182: tupleTypeCS ::= Tuple ( variableListCSopt )
//
case 182: {
CSTNode result = createTupleTypeCS((EList)dtParser.getSym(3));
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 183: variableListCSopt ::= $Empty
//
case 183:
dtParser.setSym1(new BasicEList());
break;
//
// Rule 185: variableListCS ::= variableCS
//
case 185: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 186: variableListCS ::= variableListCS , variableCS
//
case 186: {
EList result = (EList)dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 187: variableListCS2 ::= variableCS2
//
case 187:
//
// Rule 188: variableListCS2 ::= variableCS
//
case 188: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 189: variableListCS2 ::= variableListCS2 , variableCS2
//
case 189:
//
// Rule 190: variableListCS2 ::= variableListCS2 , variableCS
//
case 190: {
EList result = (EList)dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 193: featureCallExpCS ::= MINUS isMarkedPreCS ( argumentsCSopt )
//
case 193:
//
// Rule 194: featureCallExpCS ::= not isMarkedPreCS ( argumentsCSopt )
//
case 194: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.IDENTIFIER_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
CSTNode result = createOperationCallExpCS(
simpleNameCS,
(IsMarkedPreCS)dtParser.getSym(2),
(EList)dtParser.getSym(4)
);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(5)));
dtParser.setSym1(result);
break;
}
//
// Rule 195: operationCallExpCS ::= simpleNameCS isMarkedPreCS ( argumentsCSopt )
//
case 195: {
CSTNode result = createOperationCallExpCS(
(SimpleNameCS)dtParser.getSym(1),
(IsMarkedPreCS)dtParser.getSym(2),
(EList)dtParser.getSym(4)
);
setOffsets(result, (CSTNode)dtParser.getSym(1), getIToken(dtParser.getToken(5)));
dtParser.setSym1(result);
break;
}
//
// Rule 196: operationCallExpCS ::= oclIsUndefined isMarkedPreCS ( argumentsCSopt )
//
case 196:
//
// Rule 197: operationCallExpCS ::= oclIsInvalid isMarkedPreCS ( argumentsCSopt )
//
case 197:
//
// Rule 198: operationCallExpCS ::= oclIsNew isMarkedPreCS ( argumentsCSopt )
//
case 198:
//
// Rule 199: operationCallExpCS ::= oclAsType isMarkedPreCS ( argumentsCSopt )
//
case 199:
//
// Rule 200: operationCallExpCS ::= oclIsKindOf isMarkedPreCS ( argumentsCSopt )
//
case 200:
//
// Rule 201: operationCallExpCS ::= oclIsTypeOf isMarkedPreCS ( argumentsCSopt )
//
case 201:
//
// Rule 202: operationCallExpCS ::= EQUAL isMarkedPreCS ( argumentsCSopt )
//
case 202:
//
// Rule 203: operationCallExpCS ::= NOT_EQUAL isMarkedPreCS ( argumentsCSopt )
//
case 203:
//
// Rule 204: operationCallExpCS ::= PLUS isMarkedPreCS ( argumentsCSopt )
//
case 204:
//
// Rule 205: operationCallExpCS ::= MULTIPLY isMarkedPreCS ( argumentsCSopt )
//
case 205:
//
// Rule 206: operationCallExpCS ::= DIVIDE isMarkedPreCS ( argumentsCSopt )
//
case 206:
//
// Rule 207: operationCallExpCS ::= GREATER isMarkedPreCS ( argumentsCSopt )
//
case 207:
//
// Rule 208: operationCallExpCS ::= LESS isMarkedPreCS ( argumentsCSopt )
//
case 208:
//
// Rule 209: operationCallExpCS ::= GREATER_EQUAL isMarkedPreCS ( argumentsCSopt )
//
case 209:
//
// Rule 210: operationCallExpCS ::= LESS_EQUAL isMarkedPreCS ( argumentsCSopt )
//
case 210:
//
// Rule 211: operationCallExpCS ::= and isMarkedPreCS ( argumentsCSopt )
//
case 211:
//
// Rule 212: operationCallExpCS ::= or isMarkedPreCS ( argumentsCSopt )
//
case 212:
//
// Rule 213: operationCallExpCS ::= xor isMarkedPreCS ( argumentsCSopt )
//
case 213:
//
// Rule 214: keywordOperationCallExpCS ::= keywordAsIdentifier isMarkedPreCS ( argumentsCSopt )
//
case 214: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.IDENTIFIER_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
CSTNode result = createOperationCallExpCS(
simpleNameCS,
(IsMarkedPreCS)dtParser.getSym(2),
(EList)dtParser.getSym(4)
);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(5)));
dtParser.setSym1(result);
break;
}
//
// Rule 215: operationCallExpCS ::= oclIsInState isMarkedPreCS ( pathNameCSOpt )
//
case 215: {
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.KEYWORD_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
PathNameCS pathNameCS = (PathNameCS) dtParser.getSym(4);
StateExpCS stateExpCS = createStateExpCS(pathNameCS);
setOffsets(stateExpCS, pathNameCS);
CSTNode result = createOperationCallExpCS(
simpleNameCS,
(IsMarkedPreCS)dtParser.getSym(2),
stateExpCS
);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(5)));
dtParser.setSym1(result);
break;
}
//
// Rule 216: attrOrNavCallExpCS ::= simpleNameCS isMarkedPreCS
//
case 216: {
IsMarkedPreCS isMarkedPreCS = (IsMarkedPreCS)dtParser.getSym(2);
CSTNode result = createFeatureCallExpCS(
(SimpleNameCS)dtParser.getSym(1),
new BasicEList(),
isMarkedPreCS
);
if (isMarkedPreCS.isPre()) {
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(2));
} else {
setOffsets(result, (CSTNode)dtParser.getSym(1));
}
dtParser.setSym1(result);
break;
}
//
// Rule 217: attrOrNavCallExpCS ::= keywordAsIdentifier isMarkedPreCS
//
case 217: {
IsMarkedPreCS isMarkedPreCS = (IsMarkedPreCS)dtParser.getSym(2);
SimpleNameCS simpleNameCS = createSimpleNameCS(
SimpleTypeEnum.IDENTIFIER_LITERAL,
getTokenText(dtParser.getToken(1))
);
setOffsets(simpleNameCS, getIToken(dtParser.getToken(1)));
CSTNode result = createFeatureCallExpCS(
simpleNameCS,
new BasicEList(),
isMarkedPreCS
);
if (isMarkedPreCS.isPre()) {
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(2));
} else {
setOffsets(result, getIToken(dtParser.getToken(1)));
}
dtParser.setSym1(result);
break;
}
//
// Rule 218: attrOrNavCallExpCS ::= simpleNameCS [ argumentsCS ] isMarkedPreCS
//
case 218: {
IsMarkedPreCS isMarkedPreCS = (IsMarkedPreCS)dtParser.getSym(5);
CSTNode result = createFeatureCallExpCS(
(SimpleNameCS)dtParser.getSym(1),
(EList)dtParser.getSym(3),
isMarkedPreCS
);
if (isMarkedPreCS.isPre()) {
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(5));
} else {
setOffsets(result, (CSTNode)dtParser.getSym(1), getIToken(dtParser.getToken(4)));
}
dtParser.setSym1(result);
break;
}
//
// Rule 219: isMarkedPreCS ::= $Empty
//
case 219: {
CSTNode result = createIsMarkedPreCS(false);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 220: isMarkedPreCS ::= @pre
//
case 220: {
CSTNode result = createIsMarkedPreCS(true);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 221: argumentsCSopt ::= $Empty
//
case 221:
dtParser.setSym1(new BasicEList());
break;
//
// Rule 223: argumentsCS ::= oclExpressionCS
//
case 223: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 224: argumentsCS ::= argumentsCS , oclExpressionCS
//
case 224: {
EList result = (EList)dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 225: letExpCS ::= let variableCS letExpSubCSopt in oclExpressionCS
//
case 225: {
EList variables = (EList)dtParser.getSym(3);
variables.add(0, dtParser.getSym(2));
CSTNode result = createLetExpCS(
variables,
(OCLExpressionCS)dtParser.getSym(5)
);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(5));
dtParser.setSym1(result);
break;
}
//
// Rule 226: letExpSubCSopt ::= $Empty
//
case 226:
dtParser.setSym1(new BasicEList());
break;
//
// Rule 228: letExpSubCS ::= , variableCS
//
case 228: {
EList result = new BasicEList();
result.add(dtParser.getSym(2));
dtParser.setSym1(result);
break;
}
//
// Rule 229: letExpSubCS ::= letExpSubCS , variableCS
//
case 229: {
EList result = (EList)dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 230: ifExpCS ::= if oclExpressionCS then oclExpressionCS else oclExpressionCS endif
//
case 230: {
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 231: messageExpCS ::= ^ simpleNameCS ( oclMessageArgumentsCSopt )
//
case 231:
//
// Rule 232: messageExpCS ::= ^^ simpleNameCS ( oclMessageArgumentsCSopt )
//
case 232: {
CSTNode result = createMessageExpCS(
getIToken(dtParser.getToken(1)).getKind() == OCLParsersym.TK_CARET,
(SimpleNameCS)dtParser.getSym(2),
(EList<OCLMessageArgCS>)dtParser.getSym(4)
);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(5)));
dtParser.setSym1(result);
break;
}
//
// Rule 233: oclMessageArgumentsCSopt ::= $Empty
//
case 233:
dtParser.setSym1(new BasicEList());
break;
//
// Rule 235: oclMessageArgumentsCS ::= oclMessageArgCS
//
case 235: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 236: oclMessageArgumentsCS ::= oclMessageArgumentsCS , oclMessageArgCS
//
case 236: {
EList result = (EList)dtParser.getSym(1);
result.add(dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 237: oclMessageArgCS ::= oclExpressionCS
//
case 237: {
CSTNode result = createOCLMessageArgCS(
null,
(OCLExpressionCS)dtParser.getSym(1)
);
setOffsets(result, (CSTNode)dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 238: oclMessageArgCS ::= ?
//
case 238: {
CSTNode result = createOCLMessageArgCS(
null,
null
);
setOffsets(result, getIToken(dtParser.getToken(1)));
dtParser.setSym1(result);
break;
}
//
// Rule 239: oclMessageArgCS ::= ? : typeCS
//
case 239: {
CSTNode result = createOCLMessageArgCS(
(TypeCS)dtParser.getSym(3),
null
);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 248: packageDeclarationCSm ::= packageDeclarationCSm packageDeclarationCS
//
case 248: {
PackageDeclarationCS result = (PackageDeclarationCS)dtParser.getSym(2);
result.setPackageDeclarationCS((PackageDeclarationCS) dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 249: packageDeclarationCS ::= package pathNameCS contextDeclCSmopt endpackage
//
case 249: {
CSTNode result = createPackageDeclarationCS(
(PathNameCS)dtParser.getSym(2),
(EList)dtParser.getSym(3)
);
setOffsets(result, getIToken(dtParser.getToken(1)), getIToken(dtParser.getToken(4)));
dtParser.setSym1(result);
break;
}
//
// Rule 250: packageDeclarationCS1 ::= contextDeclCSm
//
case 250: {
EList contextDecls = (EList)dtParser.getSym(1);
CSTNode result = createPackageDeclarationCS(null, contextDecls);
if (!contextDecls.isEmpty()) {
setOffsets(result, (CSTNode)contextDecls.get(0), (CSTNode)contextDecls.get(contextDecls.size()-1));
}
dtParser.setSym1(result);
break;
}
//
// Rule 251: contextDeclCSmopt ::= $Empty
//
case 251:
dtParser.setSym1(new BasicEList());
break;
//
// Rule 253: contextDeclCSm ::= contextDeclCS
//
case 253: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 254: contextDeclCSm ::= contextDeclCSm contextDeclCS
//
case 254: {
EList result = (EList)dtParser.getSym(1);
result.add(dtParser.getSym(2));
dtParser.setSym1(result);
break;
}
//
// Rule 258: propertyContextCS ::= context pathNameCS :: simpleNameCS : typeCS initOrDerValueCS
//
case 258: {
CSTNode result = createPropertyContextCS(
(PathNameCS)dtParser.getSym(2),
(SimpleNameCS)dtParser.getSym(4),
(TypeCS)dtParser.getSym(6),
(InitOrDerValueCS)dtParser.getSym(7)
);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(7));
dtParser.setSym1(result);
break;
}
//
// Rule 259: initOrDerValueCS ::= initOrDerValueCSopt init : oclExpressionCS
//
case 259: {
CSTNode result = createInitValueCS(
(InitOrDerValueCS)dtParser.getSym(1),
(OCLExpressionCS)dtParser.getSym(4)
);
if (dtParser.getSym(1) != null) {
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(4));
} else {
setOffsets(result, getIToken(dtParser.getToken(2)), (CSTNode)dtParser.getSym(4));
}
dtParser.setSym1(result);
break;
}
//
// Rule 260: initOrDerValueCS ::= initOrDerValueCSopt derive : oclExpressionCS
//
case 260: {
CSTNode result = createDerValueCS(
(InitOrDerValueCS)dtParser.getSym(1),
(OCLExpressionCS)dtParser.getSym(4)
);
if (dtParser.getSym(1) != null) {
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(4));
} else {
setOffsets(result, getIToken(dtParser.getToken(2)), (CSTNode)dtParser.getSym(4));
}
dtParser.setSym1(result);
break;
}
//
// Rule 261: initOrDerValueCSopt ::= $Empty
//
case 261:
dtParser.setSym1(null);
break;
//
// Rule 263: classifierContextDeclCS ::= context pathNameCS invOrDefCS
//
case 263: {
CSTNode result = createClassifierContextDeclCS(
(PathNameCS)dtParser.getSym(2),
(InvOrDefCS)dtParser.getSym(3)
);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 264: invOrDefCSopt ::= $Empty
//
case 264:
dtParser.setSym1(null);
break;
//
// Rule 266: invOrDefCS ::= invOrDefCSopt inv simpleNameCSopt : oclExpressionCS
//
case 266: {
CSTNode result = createInvCS(
(InvOrDefCS)dtParser.getSym(1),
(SimpleNameCS)dtParser.getSym(3),
(OCLExpressionCS)dtParser.getSym(5)
);
if (dtParser.getSym(1) != null) {
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(5));
} else {
setOffsets(result, getIToken(dtParser.getToken(2)), (CSTNode)dtParser.getSym(5));
}
dtParser.setSym1(result);
break;
}
//
// Rule 267: invOrDefCS ::= invOrDefCSopt def simpleNameCSopt : defExpressionCS
//
case 267: {
CSTNode result = createDefCS(
(InvOrDefCS)dtParser.getSym(1),
(SimpleNameCS)dtParser.getSym(3),
(DefExpressionCS)dtParser.getSym(5)
);
if (dtParser.getSym(1) != null) {
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(5));
} else {
setOffsets(result, getIToken(dtParser.getToken(2)), (CSTNode)dtParser.getSym(5));
}
dtParser.setSym1(result);
break;
}
//
// Rule 268: defExpressionCS ::= IDENTIFIER : typeCS = oclExpressionCS
//
case 268: {
VariableCS variableCS = createVariableCS(
getTokenText(dtParser.getToken(1)),
(TypeCS)dtParser.getSym(3),
null
);
setOffsets(variableCS, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(3));
CSTNode result = createDefExpressionCS(
variableCS,
null,
(OCLExpressionCS)dtParser.getSym(5)
);
setOffsets(result, variableCS, (CSTNode)dtParser.getSym(5));
dtParser.setSym1(result);
break;
}
//
// Rule 269: defExpressionCS ::= operationCS1 = oclExpressionCS
//
case 269: {
CSTNode result = createDefExpressionCS(
null,
(OperationCS)dtParser.getSym(1),
(OCLExpressionCS)dtParser.getSym(3)
);
setOffsets(result, (CSTNode)dtParser.getSym(1), (CSTNode)dtParser.getSym(3));
dtParser.setSym1(result);
break;
}
//
// Rule 270: operationContextDeclCS ::= context operationCS2 prePostOrBodyDeclCSm
//
case 270: {
EList prePostOrBodyDecls = (EList)dtParser.getSym(3);
CSTNode result = createOperationContextDeclCS(
(OperationCS)dtParser.getSym(2),
prePostOrBodyDecls
);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)prePostOrBodyDecls.get(prePostOrBodyDecls.size()-1));
dtParser.setSym1(result);
break;
}
//
// Rule 271: prePostOrBodyDeclCSm ::= prePostOrBodyDeclCS
//
case 271: {
EList result = new BasicEList();
result.add(dtParser.getSym(1));
dtParser.setSym1(result);
break;
}
//
// Rule 272: prePostOrBodyDeclCSm ::= prePostOrBodyDeclCSm prePostOrBodyDeclCS
//
case 272: {
EList result = (EList)dtParser.getSym(1);
result.add(dtParser.getSym(2));
dtParser.setSym1(result);
break;
}
//
// Rule 273: prePostOrBodyDeclCS ::= pre simpleNameCSopt : oclExpressionCS
//
case 273: {
CSTNode result = createPrePostOrBodyDeclCS(
PrePostOrBodyEnum.PRE_LITERAL,
(SimpleNameCS)dtParser.getSym(2),
(OCLExpressionCS)dtParser.getSym(4)
);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(4));
dtParser.setSym1(result);
break;
}
//
// Rule 274: prePostOrBodyDeclCS ::= post simpleNameCSopt : oclExpressionCS
//
case 274: {
CSTNode result = createPrePostOrBodyDeclCS(
PrePostOrBodyEnum.POST_LITERAL,
(SimpleNameCS)dtParser.getSym(2),
(OCLExpressionCS)dtParser.getSym(4)
);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(4));
dtParser.setSym1(result);
break;
}
//
// Rule 275: prePostOrBodyDeclCS ::= body simpleNameCSopt : oclExpressionCS
//
case 275: {
CSTNode result = createPrePostOrBodyDeclCS(
PrePostOrBodyEnum.BODY_LITERAL,
(SimpleNameCS)dtParser.getSym(2),
(OCLExpressionCS)dtParser.getSym(4)
);
setOffsets(result, getIToken(dtParser.getToken(1)), (CSTNode)dtParser.getSym(4));
dtParser.setSym1(result);
break;
}
default:
break;
}
return;
}
}