internal virtual void AssignTokenTypes(Grammar g, IList<GrammarAST> tokensDefs, IList<GrammarAST> tokenIDs, IList<GrammarAST> terminals) { //Grammar G = g.getOutermostGrammar(); // put in root, even if imported // create token types for tokens { A, B, C } ALIASES foreach (GrammarAST alias in tokensDefs) { if (g.GetTokenType(alias.Text) != TokenConstants.InvalidType) { g.tool.errMgr.GrammarError(ErrorType.TOKEN_NAME_REASSIGNMENT, g.fileName, alias.Token, alias.Text); } g.DefineTokenName(alias.Text); } // DEFINE TOKEN TYPES FOR TOKEN REFS LIKE ID, INT foreach (GrammarAST idAST in tokenIDs) { if (g.GetTokenType(idAST.Text) == TokenConstants.InvalidType) { g.tool.errMgr.GrammarError(ErrorType.IMPLICIT_TOKEN_DEFINITION, g.fileName, idAST.Token, idAST.Text); } g.DefineTokenName(idAST.Text); } // VERIFY TOKEN TYPES FOR STRING LITERAL REFS LIKE 'while', ';' foreach (GrammarAST termAST in terminals) { if (termAST.Type != ANTLRParser.STRING_LITERAL) { continue; } if (g.GetTokenType(termAST.Text) == TokenConstants.InvalidType) { g.tool.errMgr.GrammarError(ErrorType.IMPLICIT_STRING_DEFINITION, g.fileName, termAST.Token, termAST.Text); } } g.tool.Log("semantics", "tokens=" + g.tokenNameToTypeMap); g.tool.Log("semantics", "strings=" + g.stringLiteralToTypeMap); }