source: default/v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfAnalysisUtils.java @ 61

Last change on this file since 61 was 61, checked in by hkaulbersch, 10 years ago

initial commit

  • Property svn:mime-type set to text/plain
File size: 2.7 KB
Line 
1package de.ugoe.cs.swe.bnftools.validation;
2
3import java.util.ArrayList;
4import java.util.List;
5
6import org.eclipse.xtext.EcoreUtil2;
7import de.ugoe.cs.swe.bnftools.ebnf.Atom;
8import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
9import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
10import de.ugoe.cs.swe.bnftools.ebnf.Rule;
11import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
12import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
13import de.ugoe.cs.swe.bnftools.ebnf.Term;
14
15public class EbnfAnalysisUtils {
16
17        //----------------------------------------------------------------------------------------------------
18
19        static public boolean isPassthroughRule(Rule rule) {
20                DefinitionList definitionList = rule.getDefinitionList();
21                if (definitionList == null)
22                        return false;
23               
24                if (rule.getDefinitionList().getSingleDefinition().size() == 1) {
25                        SingleDefinition element = rule.getDefinitionList().getSingleDefinition().get(0);
26                        if (element.getTerms().size() == 1) {
27                                Term first = element.getTerms().get(0);
28                                if (first.getTermAtom() != null) {
29                                        Atom atom = (Atom) first.getTermAtom();
30                                        if (atom.getAtomRuleReference() != null)
31                                                return true;
32                                }
33                        }
34                }
35
36                return false;
37        }
38
39
40       
41        //----------------------------------------------------------------------------------------------------
42
43        static public boolean isTokenRule(Rule rule) {
44                DefinitionList definitionList = rule.getDefinitionList();
45                if (definitionList == null)
46                        return false;
47               
48                if (rule.getDefinitionList().getSingleDefinition().size() == 1) {
49                        SingleDefinition element = rule.getDefinitionList().getSingleDefinition().get(0);
50                        if (element.getTerms().size() == 1) {
51                                Term first = element.getTerms().get(0);
52                                Atom atom = first.getTermAtom();
53                                if (atom != null && atom.getAtomStringRule() != null)  {
54                                        return true;
55                                }
56                        }
57                }
58
59                return false;
60        }
61
62
63
64        //----------------------------------------------------------------------------------------------------
65
66        static public List<RuleReference> findReferences(Rule rule) {
67                List<RuleReference> ruleReferences = new ArrayList<RuleReference>();
68                EtsiBnf bnf = (EtsiBnf) rule.eContainer().eContainer();
69
70                List<RuleReference> rules = EcoreUtil2.getAllContentsOfType(bnf, RuleReference.class);
71                for (RuleReference r : rules) {
72                        if(r.getRuleref().getName().equals(rule.getName())){
73                                ruleReferences.add(r);
74                        }
75                }
76               
77                return ruleReferences;
78        }
79
80        //----------------------------------------------------------------------------------------------------
81        public static List<Rule> getAllRules(EtsiBnf bnf){
82                List<Rule> rules = EcoreUtil2.getAllContentsOfType(bnf, Rule.class);
83                return rules;
84        }
85}
Note: See TracBrowser for help on using the repository browser.