Antlr3.Tool.Grammar.DefineRule C# (CSharp) Method

DefineRule() public method

public DefineRule ( Antlr.Runtime.IToken ruleToken, string modifier, object>.IDictionary options, Antlr3.Tool.GrammarAST tree, Antlr3.Tool.GrammarAST argActionAST, int numAlts ) : void
ruleToken Antlr.Runtime.IToken
modifier string
options object>.IDictionary
tree Antlr3.Tool.GrammarAST
argActionAST Antlr3.Tool.GrammarAST
numAlts int
return void
        public virtual void DefineRule( IToken ruleToken,
                               string modifier,
                               IDictionary<string,object> options,
                               GrammarAST tree,
                               GrammarAST argActionAST,
                               int numAlts )
        {
            string ruleName = ruleToken.Text;
            if ( GetLocallyDefinedRule( ruleName ) != null )
            {
                ErrorManager.GrammarError( ErrorManager.MSG_RULE_REDEFINITION,
                                          this, ruleToken, ruleName );
                return;
            }

            if ( ( type == GrammarType.Parser || type == GrammarType.TreeParser ) &&
                 Rule.GetRuleType(ruleName) == RuleType.Lexer)
            {
                ErrorManager.GrammarError( ErrorManager.MSG_LEXER_RULES_NOT_ALLOWED,
                                          this, ruleToken, ruleName );
                return;
            }

            Rule r = new Rule( this, ruleName, composite.RuleIndex, numAlts );
            /*
            [email protected]("defineRule("+ruleName+",modifier="+modifier+
                               "): index="+r.index+", nalts="+numAlts);
            */
            r.Modifier = modifier ?? DefaultRuleModifier;
            nameToRuleMap[ruleName] = r;
            SetRuleAST( ruleName, tree );
            r.SetOptions( options, ruleToken );
            r.ArgActionAST = argActionAST;
            composite.RuleIndexToRuleList.Resize( composite.RuleIndex + 1 );
            composite.RuleIndexToRuleList[composite.RuleIndex] = r;
            composite.RuleIndex++;
            if ( ruleName.StartsWith( SynpredRulePrefix ) )
            {
                r.IsSynPred = true;
            }
        }
Grammar