public override CSymbol Resolve()
{
// to the first occurrence
int n = yytext.Length;
string ns ="";
for (int p=1;p+1<n;p++) // fix \ escapes
if (yytext[p] == '\\')
{
if (p+1<n)
p++;
if (yytext[p]>='0' && yytext[p]<='7')
{
int v;
for (v = yytext[p++]-'0';p<n && yytext[p]>='0' && yytext[p]<='7';p++)
v=v*8+yytext[p]-'0';
ns += (char)v;
}
else
switch(yytext[p])
{
case 'n' : ns += '\n'; break;
case 't' : ns += '\t'; break;
case 'r' : ns += '\r'; break;
default: ns += yytext[p]; break;
}
}
else
ns += yytext[p];
yytext = ns;
CSymbol ob = (CSymbol)m_parser.m_symbols.literals[yytext];
if (ob!=null)
return ob;
m_yynum = ++m_parser.LastSymbol;
m_parser.m_symbols.literals[yytext] = this;
m_parser.m_symbols.symbolInfo[m_yynum] = new ParsingInfo(yytext,m_yynum);
return this;
}