Search in sources :

Example 26 with Group

use of org.eclipse.xtext.Group in project xtext-core by eclipse.

the class GrammarParserTest method testPrecedencies_03.

@Test
public void testPrecedencies_03() throws Exception {
    UnorderedGroup group = (UnorderedGroup) getModel("'keyword' 'keyword' & 'keyword' 'keyword'");
    assertNotNull(group);
    assertEquals(2, group.getElements().size());
    assertTrue(group.getElements().get(0) instanceof Group);
    assertTrue(group.getElements().get(1) instanceof Group);
}
Also used : Group(org.eclipse.xtext.Group) UnorderedGroup(org.eclipse.xtext.UnorderedGroup) UnorderedGroup(org.eclipse.xtext.UnorderedGroup) Test(org.junit.Test)

Example 27 with Group

use of org.eclipse.xtext.Group in project xtext-core by eclipse.

the class GrammarParserTest method testGroup.

@Test
public void testGroup() throws Exception {
    Group group = (Group) getModel("'keyword' 'keyword'");
    assertNotNull(group);
    assertEquals(2, group.getElements().size());
}
Also used : Group(org.eclipse.xtext.Group) UnorderedGroup(org.eclipse.xtext.UnorderedGroup) Test(org.junit.Test)

Example 28 with Group

use of org.eclipse.xtext.Group in project xtext-core by eclipse.

the class TreeConstTest method testExpression1.

@Test
public void testExpression1() throws Exception {
    StringBuilder s = new StringBuilder();
    s.append("Expression: Add; ");
    s.append("Add returns Expression: Mult ({Add.left=current} '+' right=Mult)?; ");
    s.append("Mult returns Expression: Prim ({Mult.left=current} '+' right=Prim)?; ");
    s.append("Prim returns Expression: {Val} val=INT | '(' Expression ')'; ");
    Grammar rule = parseGrammar(s.toString());
    AbstractRule expression = rule.getRules().get(0);
    assertTypes(nfa.getNFA(expression.getAlternatives()).getTypes(), "Val", "Add", "Mult");
    assertTypes(nfa.getNFA(expression.getAlternatives()).getTypesToCheck(), "Val", "Add", "Mult");
    AbstractRule add = rule.getRules().get(1);
    assertTypes(nfa.getNFA(add.getAlternatives()).getTypes(), "Val", "Add", "Mult");
    assertTypes(nfa.getNFA(add.getAlternatives()).getTypesToCheck(), "Val", "Add", "Mult");
    Group add_g1 = (Group) ((Group) add.getAlternatives()).getElements().get(1);
    assertTypes(nfa.getNFA(add_g1).getTypes(), "Add");
    assertTypes(nfa.getNFA(add_g1).getTypesToCheck(), "Add");
    assertTypes(nfa.getNFA(add_g1.getElements().get(2)).getTypes(), "Add");
    assertTypes(nfa.getNFA(add_g1.getElements().get(2)).getTypesToCheck());
    AbstractRule mult = rule.getRules().get(2);
    assertTypes(nfa.getNFA(mult.getAlternatives()).getTypes(), "Val", "Add", "Mult");
    assertTypes(nfa.getNFA(mult.getAlternatives()).getTypesToCheck(), "Val", "Add", "Mult");
    AbstractRule prim = rule.getRules().get(3);
    assertTypes(nfa.getNFA(prim.getAlternatives()).getTypes(), "Val", "Add", "Mult");
    assertTypes(nfa.getNFA(prim.getAlternatives()).getTypesToCheck(), "Val", "Add", "Mult");
}
Also used : Group(org.eclipse.xtext.Group) Grammar(org.eclipse.xtext.Grammar) AbstractRule(org.eclipse.xtext.AbstractRule) Test(org.junit.Test)

Example 29 with Group

use of org.eclipse.xtext.Group in project xtext-core by eclipse.

the class AntlrGrammarGenUtil method getPredicatedElement.

/**
 * @since 2.9
 */
public static AbstractElement getPredicatedElement(AbstractElement element) {
    if (element.isPredicated()) {
        return doGetPredicatedElement(element);
    }
    if (element instanceof Assignment) {
        return getPredicatedElement(((Assignment) element).getTerminal());
    }
    if (element instanceof RuleCall) {
        final RuleCall ruleCall = (RuleCall) element;
        final AbstractRule calledRule = ruleCall.getRule();
        Group group = (Group) calledRule.getAlternatives();
        AbstractElement first = group.getElements().get(0);
        AbstractElement result = getPredicatedElement(first);
        if (ruleCall.getArguments().isEmpty()) {
            return result;
        }
        EcoreUtil.Copier copier = new EcoreUtil.Copier() {

            private static final long serialVersionUID = 1L;

            @Override
            public EObject copy(EObject eObject) {
                if (eObject instanceof ParameterReference) {
                    ParameterReference paramRef = (ParameterReference) eObject;
                    Parameter parameter = paramRef.getParameter();
                    if (calledRule == GrammarUtil.containingRule(parameter)) {
                        for (NamedArgument givenArgument : ruleCall.getArguments()) {
                            if (givenArgument.getParameter() == parameter) {
                                EObject result = copy(givenArgument.getValue());
                                return result;
                            }
                        }
                        throw new IllegalStateException();
                    }
                }
                return super.copy(eObject);
            }
        };
        AbstractElement clone = (AbstractElement) copier.copy(result);
        copier.copyReferences();
        return clone;
    }
    return doGetPredicatedElement(element);
}
Also used : Group(org.eclipse.xtext.Group) AbstractElement(org.eclipse.xtext.AbstractElement) ParameterReference(org.eclipse.xtext.ParameterReference) RuleCall(org.eclipse.xtext.RuleCall) Assignment(org.eclipse.xtext.Assignment) EObject(org.eclipse.emf.ecore.EObject) Parameter(org.eclipse.xtext.Parameter) EcoreUtil(org.eclipse.emf.ecore.util.EcoreUtil) NamedArgument(org.eclipse.xtext.NamedArgument) AbstractRule(org.eclipse.xtext.AbstractRule)

Example 30 with Group

use of org.eclipse.xtext.Group in project xtext-core by eclipse.

the class XtextScopingTest method testScope_01.

@Test
public void testScope_01() {
    ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(grammar, "AbstractCallOverridenParserRule");
    assertNotNull(rule);
    Group group = (Group) rule.getAlternatives();
    Assignment ass = (Assignment) group.getElements().get(1);
    assertNotNull(ass);
    RuleCall call = (RuleCall) ass.getTerminal();
    AbstractRule calledRule = call.getRule();
    assertNotNull(calledRule);
    XtextGrammarAccess ga = (XtextGrammarAccess) get(IGrammarAccess.class);
    String text = get(ICrossReferenceSerializer.class).serializeCrossRef(call, ga.getRuleCallAccess().getRuleAbstractRuleCrossReference_0_0(), calledRule, null);
    assertNotNull(text);
    assertEquals(calledRule.getName(), text);
}
Also used : Assignment(org.eclipse.xtext.Assignment) ParserRule(org.eclipse.xtext.ParserRule) Group(org.eclipse.xtext.Group) ICrossReferenceSerializer(org.eclipse.xtext.parsetree.reconstr.ITokenSerializer.ICrossReferenceSerializer) IGrammarAccess(org.eclipse.xtext.IGrammarAccess) AbstractRule(org.eclipse.xtext.AbstractRule) XtextGrammarAccess(org.eclipse.xtext.services.XtextGrammarAccess) RuleCall(org.eclipse.xtext.RuleCall) Test(org.junit.Test)

Aggregations

Group (org.eclipse.xtext.Group)34 AbstractElement (org.eclipse.xtext.AbstractElement)16 RuleCall (org.eclipse.xtext.RuleCall)16 UnorderedGroup (org.eclipse.xtext.UnorderedGroup)15 Test (org.junit.Test)14 AbstractRule (org.eclipse.xtext.AbstractRule)13 Assignment (org.eclipse.xtext.Assignment)13 ParserRule (org.eclipse.xtext.ParserRule)13 EObject (org.eclipse.emf.ecore.EObject)10 Grammar (org.eclipse.xtext.Grammar)10 Alternatives (org.eclipse.xtext.Alternatives)9 Action (org.eclipse.xtext.Action)6 Parameter (org.eclipse.xtext.Parameter)5 TerminalRule (org.eclipse.xtext.TerminalRule)5 CompoundElement (org.eclipse.xtext.CompoundElement)4 ArrayList (java.util.ArrayList)3 Keyword (org.eclipse.xtext.Keyword)3 NamedArgument (org.eclipse.xtext.NamedArgument)3 ParameterReference (org.eclipse.xtext.ParameterReference)3 XtextSwitch (org.eclipse.xtext.util.XtextSwitch)3