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);
}