use of org.whole.lang.grammars.model.When in project whole by wholeplatform.
the class Grammars2ModelsVisitor method createFeature.
protected Feature createFeature(IEntityIterator<Rule> ruleIterator, String featureName) {
ModelsEntityFactory mf = ModelsEntityFactory.instance;
IEntityBuilder<Feature> fb = mf.buildFeature();
fb.set(ModelsFeatureDescriptorEnum.name, featureName);
while (ruleIterator.hasNext()) {
Rule rule = ruleIterator.next();
switch(rule.wGetEntityOrd()) {
// break;
case GrammarsEntityDescriptorEnum.When_ord:
When when = (When) rule;
((AbstractPatternFilterIterator<Rule>) ruleIterator).skipTo(when.getRule());
break;
case GrammarsEntityDescriptorEnum.NonTerminal_ord:
if (isLexicalNonTerminal((NonTerminal) rule) && EntityUtils.hasParent(rule) && Matcher.match(GrammarsEntityDescriptorEnum.Concatenate, rule.wGetParent()))
break;
fb.set(ModelsFeatureDescriptorEnum.type, mf.createSimpleName(getMappedEntityName((NonTerminal) rule)));
IEntity ancestor = null;
IEntityIterator<IEntity> iterator = IteratorFactory.ancestorIterator();
iterator.reset(Matcher.findAncestor(GrammarsEntityDescriptorEnum.As, rule));
while (iterator.hasNext() && !Matcher.match(GrammarsEntityDescriptorEnum.Production, ancestor = iterator.next())) if (Matcher.match(GrammarsEntityDescriptorEnum.Optional, ancestor))
fb.set(ModelsFeatureDescriptorEnum.modifiers, mf.createFeatureModifiers(mf.createFeatureModifier(FeatureModifierEnum.optional)));
return fb.getResult();
}
}
throw new IllegalArgumentException("Missing NonTerminal");
}
use of org.whole.lang.grammars.model.When in project whole by wholeplatform.
the class WhenPart method getModelSpecificChildren.
protected List<IEntity> getModelSpecificChildren() {
When entity = getModelEntity();
List<IEntity> list = new ArrayList<IEntity>(2);
list.add(entity.getPredicate());
list.add(entity.getRule());
return list;
}
Aggregations