use of org.eclipse.xtext.EnumRule in project xtext-core by eclipse.
the class PsiAntlrGrammarGenerator method _assignmentEbnf.
@Override
protected String _assignmentEbnf(final RuleCall it, final Assignment assignment, final AntlrOptions options, final boolean supportActions) {
String _xifexpression = null;
if (supportActions) {
String _switchResult = null;
AbstractRule _rule = it.getRule();
boolean _matched = false;
if (_rule instanceof EnumRule) {
_matched = true;
}
if (!_matched) {
if (_rule instanceof ParserRule) {
_matched = true;
}
}
if (_matched) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("{");
_builder.newLine();
_builder.append("\t");
CharSequence _markComposite = this.markComposite(it);
_builder.append(_markComposite, "\t");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
String _localVar = this._grammarAccessExtensions.localVar(assignment, it);
_builder.append(_localVar);
_builder.append("=");
String __assignmentEbnf = super._assignmentEbnf(it, assignment, options, supportActions);
_builder.append(__assignmentEbnf);
_builder.newLineIfNotEmpty();
_builder.append("{");
_builder.newLine();
_builder.append("\t");
CharSequence _doneComposite = this.doneComposite(it);
_builder.append(_doneComposite, "\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("if(!$current) {");
_builder.newLine();
_builder.append("\t\t");
CharSequence _associateWithSemanticElement = this.associateWithSemanticElement();
_builder.append(_associateWithSemanticElement, "\t\t");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("$current = true;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_switchResult = _builder.toString();
}
if (!_matched) {
if (_rule instanceof TerminalRule) {
_matched = true;
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("{");
_builder_1.newLine();
_builder_1.append("\t");
CharSequence _markLeaf = this.markLeaf(it);
_builder_1.append(_markLeaf, "\t");
_builder_1.newLineIfNotEmpty();
_builder_1.append("}");
_builder_1.newLine();
String _localVar_1 = this._grammarAccessExtensions.localVar(assignment, it);
_builder_1.append(_localVar_1);
_builder_1.append("=");
String __assignmentEbnf_1 = super._assignmentEbnf(it, assignment, options, supportActions);
_builder_1.append(__assignmentEbnf_1);
_builder_1.newLineIfNotEmpty();
_builder_1.append("{");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("if(!$current) {");
_builder_1.newLine();
_builder_1.append("\t\t");
CharSequence _associateWithSemanticElement_1 = this.associateWithSemanticElement();
_builder_1.append(_associateWithSemanticElement_1, "\t\t");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t\t");
_builder_1.append("$current = true;");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("}");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.newLine();
_builder_1.append("{");
_builder_1.newLine();
_builder_1.append("\t");
CharSequence _doneLeaf = this.doneLeaf(it, this._grammarAccessExtensions.localVar(assignment, it));
_builder_1.append(_doneLeaf, "\t");
_builder_1.newLineIfNotEmpty();
_builder_1.append("}");
_builder_1.newLine();
_switchResult = _builder_1.toString();
}
}
if (!_matched) {
throw new IllegalStateException(("assignmentEbnf is not supported for " + it));
}
_xifexpression = _switchResult;
} else {
_xifexpression = super._assignmentEbnf(it, assignment, options, supportActions);
}
return _xifexpression;
}
use of org.eclipse.xtext.EnumRule in project xtext-core by eclipse.
the class AbstractAntlrGrammarGenerator method _assignmentEbnf.
protected String _assignmentEbnf(final RuleCall it, final Assignment assignment, final AntlrOptions options, final boolean supportActions) {
String _switchResult = null;
AbstractRule _rule = it.getRule();
final AbstractRule rule = _rule;
boolean _matched = false;
if (rule instanceof EnumRule) {
_matched = true;
}
if (!_matched) {
if (rule instanceof ParserRule) {
_matched = true;
}
}
if (!_matched) {
if (rule instanceof TerminalRule) {
_matched = true;
}
}
if (_matched) {
_switchResult = this._grammarAccessExtensions.ruleName(rule);
}
if (!_matched) {
throw new IllegalStateException(("assignmentEbnf is not supported for " + rule));
}
return _switchResult;
}
use of org.eclipse.xtext.EnumRule in project xtext-core by eclipse.
the class TreeConstructionReportImpl method getDiagnosticMessage.
protected String getDiagnosticMessage(AssignmentToken token) {
Assignment ass = (Assignment) token.getGrammarElement();
Object value = token.getEObjectConsumer().getConsumable(ass.getFeature(), false);
if (value == null) {
EStructuralFeature f = token.getEObjectConsumer().getEObject().eClass().getEStructuralFeature(ass.getFeature());
if (f == null)
return "The current object of type '" + token.getEObjectConsumer().getEObject().eClass().getName() + "' does not have a feature named '" + ass.getFeature() + "'";
String cls = f.getEContainingClass() == token.getEObjectConsumer().getEObject().eClass() ? f.getEContainingClass().getName() : f.getEContainingClass().getName() + "(" + token.getEObjectConsumer().getEObject().eClass().getName() + ")";
String feat = cls + "." + f.getName();
if (f.isMany()) {
int size = ((List<?>) token.getEObjectConsumer().getEObject().eGet(f)).size();
return "All " + size + " values of " + feat + " have been consumed. " + "More are needed to continue here.";
} else
return feat + " is not set.";
} else {
ErrorAcceptor err = new ErrorAcceptor();
for (RuleCall ruleCall : GrammarUtil.containedRuleCalls(token.getGrammarElement())) {
if (ruleCall.getRule() instanceof EnumRule) {
if (enumSerializer.isValid(token.getEObject(), ruleCall, value, err))
return null;
} else if (ruleCall.getRule().getType().getClassifier() instanceof EDataType) {
if (valueSerializer.isValid(token.getEObject(), ruleCall, value, err))
return null;
}
}
return err.getMessage();
}
}
use of org.eclipse.xtext.EnumRule in project xtext-core by eclipse.
the class GrammarAccessFragment2 method doGenerateGrammarAccess.
protected void doGenerateGrammarAccess() {
final GeneratedJavaFileAccess javaFile = this.fileAccessFactory.createGeneratedJavaFile(this._grammarAccessExtensions.getGrammarAccess(this.getGrammar()));
List<IClassAnnotation> _annotations = javaFile.getAnnotations();
SingletonClassAnnotation _singletonClassAnnotation = new SingletonClassAnnotation();
_annotations.add(_singletonClassAnnotation);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("public class ");
String _simpleName = GrammarAccessFragment2.this._grammarAccessExtensions.getGrammarAccess(GrammarAccessFragment2.this.getLanguage().getGrammar()).getSimpleName();
_builder.append(_simpleName);
_builder.append(" extends ");
_builder.append(AbstractElementFinder.AbstractGrammarElementFinder.class);
_builder.append(" {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.newLine();
{
Iterable<ParserRule> _filter = Iterables.<ParserRule>filter(GrammarAccessFragment2.this.getLanguage().getGrammar().getRules(), ParserRule.class);
for (final ParserRule r : _filter) {
_builder.append("\t");
StringConcatenationClient _parserRuleClasses = GrammarAccessFragment2.this.parserRuleClasses(r);
_builder.append(_parserRuleClasses, "\t");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.newLine();
{
Iterable<EnumRule> _filter_1 = Iterables.<EnumRule>filter(GrammarAccessFragment2.this.getLanguage().getGrammar().getRules(), EnumRule.class);
for (final EnumRule r_1 : _filter_1) {
_builder.append("\t");
StringConcatenationClient _parserRuleClasses_1 = GrammarAccessFragment2.this.parserRuleClasses(r_1);
_builder.append(_parserRuleClasses_1, "\t");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.newLine();
{
EList<AbstractRule> _rules = GrammarAccessFragment2.this.getLanguage().getGrammar().getRules();
for (final AbstractRule r_2 : _rules) {
_builder.append("\t");
StringConcatenationClient _cache = GrammarAccessFragment2.this.cache(r_2);
_builder.append(_cache, "\t");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("private final ");
_builder.append(Grammar.class, "\t");
_builder.append(" grammar;");
_builder.newLineIfNotEmpty();
{
List<Grammar> _effectivelyUsedGrammars = GrammarAccessFragment2.this.getEffectivelyUsedGrammars(GrammarAccessFragment2.this.getLanguage().getGrammar());
for (final Grammar g : _effectivelyUsedGrammars) {
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("private final ");
TypeReference _grammarAccess = GrammarAccessFragment2.this._grammarAccessExtensions.getGrammarAccess(g);
_builder.append(_grammarAccess, "\t");
_builder.append(" ");
String _gaGrammarAccessLocalVarName = GrammarAccessFragment2.this.gaGrammarAccessLocalVarName(g);
_builder.append(_gaGrammarAccessLocalVarName, "\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
}
}
_builder.newLine();
_builder.append("\t");
_builder.append("@");
_builder.append(Inject.class, "\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("public ");
String _simpleName_1 = GrammarAccessFragment2.this._grammarAccessExtensions.getGrammarAccess(GrammarAccessFragment2.this.getLanguage().getGrammar()).getSimpleName();
_builder.append(_simpleName_1, "\t");
_builder.append("(");
_builder.append(GrammarProvider.class, "\t");
_builder.append(" grammarProvider");
{
List<Grammar> _effectivelyUsedGrammars_1 = GrammarAccessFragment2.this.getEffectivelyUsedGrammars(GrammarAccessFragment2.this.getLanguage().getGrammar());
for (final Grammar g_1 : _effectivelyUsedGrammars_1) {
_builder.append(",");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t\t");
TypeReference _grammarAccess_1 = GrammarAccessFragment2.this._grammarAccessExtensions.getGrammarAccess(g_1);
_builder.append(_grammarAccess_1, "\t\t\t");
_builder.append(" ");
String _gaGrammarAccessLocalVarName_1 = GrammarAccessFragment2.this.gaGrammarAccessLocalVarName(g_1);
_builder.append(_gaGrammarAccessLocalVarName_1, "\t\t\t");
}
}
_builder.append(") {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("this.grammar = internalFindGrammar(grammarProvider);");
_builder.newLine();
{
List<Grammar> _effectivelyUsedGrammars_2 = GrammarAccessFragment2.this.getEffectivelyUsedGrammars(GrammarAccessFragment2.this.getLanguage().getGrammar());
for (final Grammar g_2 : _effectivelyUsedGrammars_2) {
_builder.append("\t\t");
_builder.append("this.");
String _gaGrammarAccessLocalVarName_2 = GrammarAccessFragment2.this.gaGrammarAccessLocalVarName(g_2);
_builder.append(_gaGrammarAccessLocalVarName_2, "\t\t");
_builder.append(" = ");
String _gaGrammarAccessLocalVarName_3 = GrammarAccessFragment2.this.gaGrammarAccessLocalVarName(g_2);
_builder.append(_gaGrammarAccessLocalVarName_3, "\t\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
}
}
{
EList<AbstractRule> _rules_1 = GrammarAccessFragment2.this.getLanguage().getGrammar().getRules();
for (final AbstractRule r_3 : _rules_1) {
_builder.append("\t\t");
StringConcatenationClient _initializer = GrammarAccessFragment2.this.initializer(r_3);
_builder.append(_initializer, "\t\t");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("protected ");
_builder.append(Grammar.class, "\t");
_builder.append(" internalFindGrammar(");
_builder.append(GrammarProvider.class, "\t");
_builder.append(" grammarProvider) {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append(Grammar.class, "\t\t");
_builder.append(" grammar = grammarProvider.getGrammar(this);");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("while (grammar != null) {");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("if (\"");
String _name = GrammarAccessFragment2.this.getLanguage().getGrammar().getName();
_builder.append(_name, "\t\t\t");
_builder.append("\".equals(grammar.getName())) {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("return grammar;");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append(List.class, "\t\t\t");
_builder.append("<");
_builder.append(Grammar.class, "\t\t\t");
_builder.append("> grammars = grammar.getUsedGrammars();");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("if (!grammars.isEmpty()) {");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("grammar = grammars.iterator().next();");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("} else {");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return grammar;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("@Override");
_builder.newLine();
_builder.append("\t");
_builder.append("public ");
_builder.append(Grammar.class, "\t");
_builder.append(" getGrammar() {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("return grammar;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
{
List<Grammar> _effectivelyUsedGrammars_3 = GrammarAccessFragment2.this.getEffectivelyUsedGrammars(GrammarAccessFragment2.this.getLanguage().getGrammar());
for (final Grammar g_3 : _effectivelyUsedGrammars_3) {
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("public ");
TypeReference _grammarAccess_2 = GrammarAccessFragment2.this._grammarAccessExtensions.getGrammarAccess(g_3);
_builder.append(_grammarAccess_2, "\t");
_builder.append(" get");
String _simpleName_2 = GrammarAccessFragment2.this._grammarAccessExtensions.getGrammarAccess(g_3).getSimpleName();
_builder.append(_simpleName_2, "\t");
_builder.append("() {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("return ");
String _gaGrammarAccessLocalVarName_4 = GrammarAccessFragment2.this.gaGrammarAccessLocalVarName(g_3);
_builder.append(_gaGrammarAccessLocalVarName_4, "\t\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
}
}
_builder.newLine();
{
List<AbstractRule> _allRules = GrammarUtil.allRules(GrammarAccessFragment2.this.getLanguage().getGrammar());
for (final AbstractRule r_4 : _allRules) {
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
StringConcatenationClient _ter = GrammarAccessFragment2.this.getter(r_4, GrammarAccessFragment2.this.getLanguage().getGrammar());
_builder.append(_ter, "\t");
_builder.newLineIfNotEmpty();
}
}
_builder.append("}");
_builder.newLine();
}
};
javaFile.setContent(_client);
javaFile.writeTo(this.getProjectConfig().getRuntime().getSrcGen());
}
use of org.eclipse.xtext.EnumRule in project xtext-core by eclipse.
the class SyntacticSequencerPDAProvider method getType.
protected SynStateType getType(ISerState state) {
switch(state.getType()) {
case ELEMENT:
AbstractElement ele = state.getGrammarElement();
Assignment ass;
if (ele instanceof Action) {
if (((Action) ele).getFeature() == null)
return SynStateType.UNASSIGEND_ACTION_CALL;
else
return SynStateType.ASSIGNED_ACTION_CALL;
} else if (GrammarUtil.containingCrossReference(ele) != null) {
if (ele instanceof RuleCall) {
RuleCall rc = (RuleCall) ele;
if (rc.getRule() instanceof ParserRule)
return SynStateType.ASSIGNED_CROSSREF_DATATYPE_RULE_CALL;
if (rc.getRule() instanceof TerminalRule)
return SynStateType.ASSIGNED_CROSSREF_TERMINAL_RULE_CALL;
if (rc.getRule() instanceof EnumRule)
return SynStateType.ASSIGNED_CROSSREF_ENUM_RULE_CALL;
} else if (ele instanceof Keyword)
return SynStateType.ASSIGNED_CROSSREF_KEYWORD;
} else if ((ass = GrammarUtil.containingAssignment(ele)) != null) {
if (ele instanceof RuleCall) {
RuleCall rc = (RuleCall) ele;
if (rc.getRule() instanceof ParserRule) {
if (rc.getRule().getType().getClassifier() instanceof EClass)
return SynStateType.ASSIGNED_PARSER_RULE_CALL;
return SynStateType.ASSIGNED_DATATYPE_RULE_CALL;
}
if (rc.getRule() instanceof TerminalRule)
return SynStateType.ASSIGNED_TERMINAL_RULE_CALL;
if (rc.getRule() instanceof EnumRule)
return SynStateType.ASSIGNED_ENUM_RULE_CALL;
} else if (ele instanceof Keyword) {
if (GrammarUtil.isBooleanAssignment(ass))
return SynStateType.ASSIGNED_BOOLEAN_KEYWORD;
else
return SynStateType.ASSIGNED_KEYWORD;
}
} else {
if (ele instanceof RuleCall) {
RuleCall rc = (RuleCall) ele;
if (rc.getRule() instanceof ParserRule)
return SynStateType.UNASSIGNED_DATATYPE_RULE_CALL;
if (rc.getRule() instanceof TerminalRule)
return SynStateType.UNASSIGNED_TERMINAL_RULE_CALL;
} else if (ele instanceof Keyword)
return SynStateType.UNASSIGEND_KEYWORD;
}
break;
case PUSH:
return SynStateType.UNASSIGNED_PARSER_RULE_ENTER;
case POP:
return SynStateType.UNASSIGNED_PARSER_RULE_EXIT;
case START:
return SynStateType.START;
case STOP:
return SynStateType.STOP;
}
throw new RuntimeException("no type found for " + state);
}
Aggregations