/** * Parses the given RuleTag into a network GrammarNodes. * * @param ruleTag * the RuleTag to parse * @return the first and last GrammarNodes of the network */ private GrammarGraph ProcessRuleTag(JSGFRuleTag ruleTag) { this.LogInfo("parseRuleTag: " + ruleTag); JSGFRule rule = ruleTag.Rule; return(ProcessRule(rule)); }
private JSGFGrammar.GrammarGraph processRuleTag(JSGFRuleTag jsgfruleTag) { this.logger.fine(new StringBuilder().append("parseRuleTag: ").append(jsgfruleTag).toString()); JSGFRule rule = jsgfruleTag.getRule(); return(this.processRule(rule)); }
protected internal virtual void resolveRule(JSGFRule r) { if (r is JSGFRuleToken) { return; } if (r is JSGFRuleAlternatives) { Iterator iterator = ((JSGFRuleAlternatives)r).getRules().iterator(); while (iterator.hasNext()) { JSGFRule jsgfrule = (JSGFRule)iterator.next(); this.resolveRule(jsgfrule); } return; } if (r is JSGFRuleSequence) { Iterator iterator = ((JSGFRuleSequence)r).getRules().iterator(); while (iterator.hasNext()) { JSGFRule jsgfrule = (JSGFRule)iterator.next(); this.resolveRule(jsgfrule); } return; } if (r is JSGFRuleCount) { this.resolveRule(((JSGFRuleCount)r).getRule()); return; } if (r is JSGFRuleTag) { JSGFRuleTag jsgfruleTag = (JSGFRuleTag)r; JSGFRule jsgfrule = jsgfruleTag.getRule(); string text = jsgfrule.toString(); object obj = (Collection)this.__ruleTags.get(text); if ((Collection)obj == null) { obj = new HashSet(); this.__ruleTags.put(text, (HashSet)obj); } object obj2 = obj; object tag = jsgfruleTag.getTag(); Collection collection; if (obj2 != null) { if ((collection = (obj2 as Collection)) == null) { throw new IncompatibleClassChangeError(); } } else { collection = null; } collection.add(tag); this.resolveRule(jsgfrule); return; } if (!(r is JSGFRuleName)) { string message = "Unknown rule type"; throw new JSGFGrammarException(message); } JSGFRuleName jsgfruleName = (JSGFRuleName)r; JSGFRuleName jsgfruleName2 = this.resolve(jsgfruleName); if (jsgfruleName2 == null) { string message2 = new StringBuilder().append("Unresolvable rulename in grammar ").append(this.name).append(": ").append(jsgfruleName).toString(); throw new JSGFGrammarException(message2); } jsgfruleName.resolvedRuleName = jsgfruleName2.getRuleName(); jsgfruleName.setRuleName(jsgfruleName2.getRuleName()); }
/** Resolve the given rule. */ protected void ResolveRule(JSGFRule r) { if (r is JSGFRuleToken) { return; } if (r is JSGFRuleAlternatives) { foreach (JSGFRule rule in ((JSGFRuleAlternatives)r).GetRules()) { ResolveRule(rule); } return; } if (r is JSGFRuleSequence) { foreach (JSGFRule rule in ((JSGFRuleSequence)r).Rules) { ResolveRule(rule); } return; } if (r is JSGFRuleCount) { ResolveRule(((JSGFRuleCount)r).Rule); return; } if (r is JSGFRuleTag) { JSGFRuleTag rt = (JSGFRuleTag)r; JSGFRule rule = rt.Rule; String ruleStr = rule.ToString(); // add the tag the tag-table var tags = RuleTags.Get(ruleStr); if (tags == null) { tags = new HashSet <String>(); RuleTags.Put(ruleStr, tags); } tags.Add(rt.Tag); ResolveRule(rule); return; } if (r is JSGFRuleName) { JSGFRuleName rn = (JSGFRuleName)r; JSGFRuleName resolved = Resolve(rn); if (resolved == null) { throw new JSGFGrammarException("Unresolvable rulename in grammar " + _name + ": " + rn); } else { // TODO: This forces all rule names to be fully resolved. // This should be changed. rn.ResolvedRuleName = resolved.GetRuleName(); rn.SetRuleName(resolved.GetRuleName()); return; } } throw new JSGFGrammarException("Unknown rule type"); }
public JSGFRule Item() { JSGFRule r; List <String> _tags = null; int count = -1; switch ((_jj_ntk == -1) ? jj_ntk() : _jj_ntk) { case Grammar: case Import: case Public: case IntegerLiteral: case FloatingPointLiteral: case StringLiteral: case Identifier: case 28: switch ((_jj_ntk == -1) ? jj_ntk() : _jj_ntk) { case Grammar: case Import: case Public: case IntegerLiteral: case FloatingPointLiteral: case StringLiteral: case Identifier: r = Terminal(); break; case 28: r = RuleRef(); break; default: jj_la1[14] = jj_gen; jj_consume_token(-1); throw new ParseException(); } switch ((_jj_ntk == -1) ? jj_ntk() : _jj_ntk) { case 30: case 35: switch ((_jj_ntk == -1) ? jj_ntk() : _jj_ntk) { case 30: jj_consume_token(30); count = JSGFRuleCount.ZeroOrMore; break; case 35: jj_consume_token(35); count = JSGFRuleCount.OnceOrMore; break; default: jj_la1[15] = jj_gen; jj_consume_token(-1); throw new ParseException(); } break; default: jj_la1[16] = jj_gen; break; } switch ((_jj_ntk == -1) ? jj_ntk() : _jj_ntk) { case Tag: _tags = Tags(); break; default: jj_la1[17] = jj_gen; break; } break; case 36: jj_consume_token(36); r = Alternatives(); jj_consume_token(37); switch ((_jj_ntk == -1) ? jj_ntk() : _jj_ntk) { case 30: case 35: switch ((_jj_ntk == -1) ? jj_ntk() : _jj_ntk) { case 30: jj_consume_token(30); count = JSGFRuleCount.ZeroOrMore; break; case 35: jj_consume_token(35); count = JSGFRuleCount.OnceOrMore; break; default: jj_la1[18] = jj_gen; jj_consume_token(-1); throw new ParseException(); } break; default: jj_la1[19] = jj_gen; break; } switch ((_jj_ntk == -1) ? jj_ntk() : _jj_ntk) { case Tag: _tags = Tags(); break; default: jj_la1[20] = jj_gen; break; } break; case 38: jj_consume_token(38); r = Alternatives(); jj_consume_token(39); count = JSGFRuleCount.Optional; switch ((_jj_ntk == -1) ? jj_ntk() : _jj_ntk) { case Tag: _tags = Tags(); break; default: jj_la1[21] = jj_gen; break; } break; default: jj_la1[22] = jj_gen; jj_consume_token(-1); throw new ParseException(); } if (count != -1) { r = new JSGFRuleCount(r, count); } if (_tags != null) { for (int i = 0; i < _tags.Count; i++) { //TODO: Check Behaviour var tag = _tags[i]; if (tag[0] == '{') { tag = tag.Substring(1, tag.Length - 1); tag = tag.Replace('\\', ' '); } r = new JSGFRuleTag(r, tag); } } { if (true) { return(r); } } }