internal static RuleExpression GetRuleSetAttributeArgument(this GrammarNavigator nav, string attributeName, bool required = true) { var attr = nav.GetAttributes().FirstOrDefault(a => a.Name == attributeName); if (attr == null) { if (required) { throw new InvalidOperationException(string.Format("Attribute [{0}] not found on rule set [{1}]!", attributeName, nav.CurrPath)); } else { return(null); } } //if (attr.Arguments.Count != 1 || !(attr.Arguments.First() is RuleExpression.RuleUsage)) if (attr.Arguments.Count != 1) { throw new InvalidOperationException(string.Format("Attribute [{0}] arguments is invalid on rule set [{1}]!", attributeName, nav.CurrPath)); } var expression = attr.Arguments.First(); return(expression); }
// IndentedWriter _log = new IndentedWriter(); private AnalyzerGraphBuilder(string rootRuleSetName, RuleSet[] ruleSets) { _ruleSets = ruleSets; _rootRuleSetName = rootRuleSetName; _expressionsVisitor = new RuleExpressionLoggingVisitor(this); _nav = new GrammarNavigator(ruleSets); }