[61] | 1 | package de.ugoe.cs.swe.bnftools.validation;
|
---|
| 2 |
|
---|
| 3 | import java.util.ArrayList;
|
---|
| 4 | import java.util.List;
|
---|
| 5 |
|
---|
| 6 | import org.eclipse.xtext.EcoreUtil2;
|
---|
| 7 | import de.ugoe.cs.swe.bnftools.ebnf.Atom;
|
---|
| 8 | import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
|
---|
| 9 | import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
|
---|
| 10 | import de.ugoe.cs.swe.bnftools.ebnf.Rule;
|
---|
| 11 | import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
|
---|
| 12 | import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
|
---|
| 13 | import de.ugoe.cs.swe.bnftools.ebnf.Term;
|
---|
| 14 |
|
---|
| 15 | public 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 | }
|
---|