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

DefineToken() public method

public DefineToken ( string text, int tokenType ) : void
text string
tokenType int
return void
        public virtual void DefineToken( string text, int tokenType )
        {
            //[email protected]("defineToken("+text+", "+tokenType+")");
            if (composite.TokenIDToTypeMap.ContainsKey( text ))
            {
                // already defined?  Must be predefined one like EOF;
                // do nothing
                return;
            }
            // the index in the typeToTokenList table is actually shifted to
            // hold faux labels as you cannot have negative indices.
            if ( text[0] == '\'' )
            {
                composite.StringLiteralToTypeMap[text] = tokenType;
                // track in reverse index too
                if ( tokenType >= composite.TypeToStringLiteralList.Count )
                {
                    composite.TypeToStringLiteralList.Resize( tokenType + 1 );
                }
                composite.TypeToStringLiteralList[tokenType] = text;
            }
            else
            {
                // must be a label like ID
                composite.TokenIDToTypeMap[text] = tokenType;
            }
            int index = Label.NUM_FAUX_LABELS + tokenType - 1;
            //[email protected]("defining "+name+" token "+text+" at type="+tokenType+", index="+index);
            composite.MaxTokenType = Math.Max( composite.MaxTokenType, tokenType );
            if ( index >= composite.TypeToTokenList.Count )
            {
                composite.TypeToTokenList.Resize( index + 1 );
            }
            string prevToken = (string)composite.TypeToTokenList[index];
            if ( prevToken == null || prevToken[0] == '\'' )
            {
                // only record if nothing there before or if thing before was a literal
                composite.TypeToTokenList[index] = text;
            }
        }

Usage Example

        protected override void DefineTokenNamesAndLiteralsInGrammar( Grammar root )
        {
            foreach ( var token in _tokens )
            {
                root.DefineToken( token.Key, token.Value );
            }

            foreach ( var lit in _stringLiterals )
            {
                root.DefineToken( lit.Key, lit.Value );
            }
        }
Grammar