示例#1
0
 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;
 }
示例#2
0
 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));
 }
示例#3
0
 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));
 }
示例#4
0
    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++)
            {
                ;
            }
        }
    }
示例#5
0
 public abstract void AssocType(Precedence.PrecType pt, int n);