Changeset 65 in default for v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfValidator.xtend
- Timestamp:
- 05/07/14 16:02:46 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfValidator.xtend
r63 r65 14 14 import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList 15 15 import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition 16 import java.util.ArrayList 17 16 18 //import java.util.HashMap 17 19 //import java.util.Set 18 20 //import java.util.HashSet 19 20 21 //import org.eclipse.xtext.validation.Check 21 22 /** … … 32 33 public static final String equalAlternativeDescription = "The rule contains equal alternatives"; 33 34 public static final String duplicateRulesDescription = "The rule is a duplicate"; 35 34 36 //public static final String duplicateSubRulesDescription = "A part the of rule is a duplicate"; 35 37 public static final String nonUniqueNameDescription = "The rule has the same Name as the Rule in Line "; … … 49 51 50 52 if (references.size() == 1 && rule.rulenumber != 1) { 51 warning(ruleReferencedOneDescription, EbnfPackage$Literals::RULE__NAME,ruleReferencedOneDescription,rule.name); 53 warning(ruleReferencedOneDescription, EbnfPackage$Literals::RULE__NAME, ruleReferencedOneDescription, 54 rule.name); 52 55 } 53 56 } … … 75 78 76 79 // run through all Rules 77 for (currentRule : allRules) { 78 if (currentRule != rule) { 79 var ICompositeNode currentRuleDefinitionList = NodeModelUtils.findActualNodeFor( 80 currentRule.getDefinitionList()); 81 var String currentRuleRightHandSideText = currentRuleDefinitionList.text.trim().replaceAll("[ \t\n\r]", 82 ""); 83 84 if (currentRuleRightHandSideText.equals(rightHandSideText)) { 85 var String description = duplicateRulesDescription + " with rule \"" + currentRule.getName() + 86 "\" (Line " + NodeModelUtils.findActualNodeFor(currentRule).getStartLine() + ")"; 87 warning(description, EbnfPackage$Literals::RULE__NAME); 88 } 89 } 90 } 80 for (currentRule : allRules) { 81 if (currentRule != rule) { 82 var ICompositeNode currentRuleDefinitionList = NodeModelUtils.findActualNodeFor( 83 currentRule.getDefinitionList()); 84 var String currentRuleRightHandSideText = currentRuleDefinitionList.text.trim().replaceAll("[ \t\n\r]", 85 ""); 86 87 if (currentRuleRightHandSideText.equals(rightHandSideText)) { 88 var String description = duplicateRulesDescription + " with rule \"" + currentRule.getName() + 89 "\" (Line " + NodeModelUtils.findActualNodeFor(currentRule).getStartLine() + ")"; 90 warning(description, EbnfPackage$Literals::RULE__NAME); 91 } 92 } 93 } 94 95 // //get all Single Definitions as Trimmed Strings 96 // var List<String> singleDefsAsString = new ArrayList<String>(); 97 // 98 // for (SingleDefinition s : (rule.definitionList).singleDefinition) { 99 // singleDefsAsString.add(NodeModelUtils.findActualNodeFor(s).text.trim().replaceAll("[ \t\n\r]", "")); 100 // } 101 // 102 // // for every rule get the single definitions as Strings 103 // var int j = 0; 104 // while (j<allRules.size) { 105 // var currentRule=allRules.get(j); 106 // if (currentRule != rule) { 107 // var List<String> singleDefsAsString1 = new ArrayList<String>(); 108 // 109 // for (SingleDefinition s : ( currentRule.definitionList).singleDefinition) { 110 // singleDefsAsString1.add(NodeModelUtils.findActualNodeFor(s).text.trim().replaceAll("[ \t\n\r]", "")); 111 // } 112 // 113 // //for every String SingleDefinition find a corresponding ind the current rule 114 // if (singleDefsAsString.size == singleDefsAsString1.size) { 115 // var List<String> singleDefsAsStringCpy = singleDefsAsString.clone; 116 // var boolean equal = true; 117 // while (equal) { 118 // var String momentaryString = singleDefsAsStringCpy.get(0); 119 // var int i = 0; 120 // var boolean found = false; 121 // while (i < singleDefsAsString1.size && !found) { 122 // if (singleDefsAsString1.get(i).equals(momentaryString)) { 123 // singleDefsAsStringCpy.remove(0); 124 // singleDefsAsString1.remove(i); 125 // found = true 126 // } 127 // i++; 128 // } 129 // if (!found) { 130 // equal = false; 131 // } 132 // if (singleDefsAsStringCpy.empty) { 133 // var String description = duplicateRulesDescription + " with rule \"" + currentRule.getName() + 134 // "\" (Line " + NodeModelUtils.findActualNodeFor(currentRule).getStartLine() + ")"; 135 // warning(description, EbnfPackage$Literals::RULE__NAME) 136 // } 137 // } 138 // } 139 // 140 // } 141 // j++; 142 // } 91 143 } 92 144 … … 122 174 123 175 if ((references.size() == 0) && (rule.getRulenumber() != 1)) 124 warning(unusedRuleDescription, EbnfPackage$Literals::RULE__NAME, unusedRuleDescription,rule.name);176 warning(unusedRuleDescription, EbnfPackage$Literals::RULE__NAME, unusedRuleDescription, rule.name); 125 177 } 126 178 … … 144 196 145 197 if (d1.equals(d2)) 146 warning(equalAlternativeDescription, EbnfPackage$Literals::RULE__NAME,equalAlternativeDescription); 198 warning(equalAlternativeDescription, EbnfPackage$Literals::RULE__NAME, 199 equalAlternativeDescription, rule.name); 147 200 } 148 201 } … … 162 215 var List<RuleReference> references = EbnfAnalysisUtils.findReferences(rule); 163 216 164 if (EbnfAnalysisUtils.isPassthroughRule(rule) ) {217 if (EbnfAnalysisUtils.isPassthroughRule(rule) && rule.rulenumber != 1) { 165 218 if (references.size() == 0) { 166 219 warning(unreferencedPassthroughRuleDescription, EbnfPackage$Literals::RULE__NAME); 167 220 } else { 168 warning(passthroughRuleDescription, EbnfPackage$Literals::RULE__NAME,passthroughRuleDescription); 221 warning(passthroughRuleDescription, EbnfPackage$Literals::RULE__NAME, passthroughRuleDescription, 222 rule.name); 169 223 } 170 224 } 171 225 } 172 226 173 174 // ---------------------------------------------------------------------------------------------------- 175 /* Checks if a subrule is used more then once, e.g.: 227 // ---------------------------------------------------------------------------------------------------- 228 /* Checks if a subrule is used more then once, e.g.: 176 229 * a ::= (a b) e 177 230 * b ::= (a b) d
Note: See TracChangeset
for help on using the changeset viewer.