public Precedence(Precedence.PrecType t, int p, Precedence next) { if (Precedence.CheckType(next, t, 0) != 0) { Console.WriteLine("redeclaration of precedence"); } this.m_next = next; this.m_type = t; this.m_prec = p; }
public static int Check(Precedence p, Precedence.PrecType t, int d) { if (p == null) { return(0); } if (p.m_type == t) { return(p.m_prec); } return(Precedence.Check(p.m_next, t, d + 1)); }
private static int CheckType(Precedence p, Precedence.PrecType t, int d) { if (p == null) { return(0); } if (p.m_type == t || p.m_type <= Precedence.PrecType.nonassoc && t <= Precedence.PrecType.nonassoc) { return(p.m_prec); } return(Precedence.Check(p.m_next, t, d + 1)); }
public override void AssocType(Precedence.PrecType pt, int p) { string line; int len, action = 0; CSymbol s; line = m_lexer.yytext; prec += 10; if (line[p] != ' ' && line[p] != '\t') { Error(33, m_lexer.m_pch, "Expected white space after precedence directive"); } for (p++; p < line.Length && (line[p] == ' ' || line[p] == '\t'); p++) { ; } while (p < line.Length) { len = m_lexer.m_start.Match(line, p, ref action); if (len < 0) { Console.WriteLine(line.Substring(p)); Error(34, m_lexer.m_pch, "Expected token"); break; } m_lexer.yytext = line.Substring(p, len); bool rej = false; s = (CSymbol)((yyptokens)(m_lexer.tokens)).OldAction(m_lexer, m_lexer.yytext, action, ref rej); s = s.Resolve(); s.m_prec = new Precedence(pt, prec, s.m_prec); for (p += len; p < line.Length && (line[p] == ' ' || line[p] == '\t'); p++) { ; } } }
public abstract void AssocType(Precedence.PrecType pt, int n);