Exemple #1
0
    public object VisitClassStmt(Stmt.ClassDefinition stmt, object options = null)
    {
        var previousTypeTable = SymbolTable.Types;

        SymbolTable.Types = AddSymbolDefinition(stmt.token.lexeme, null, AccessModifier.Public, false, new Token[] { stmt.token });
        foreach (Stmt.Var memb in stmt.members)
        {
            memb.Accept(this, new Options {
                InClassDefinition = true
            });
        }
        foreach (Stmt.Function method in stmt.methods)
        {
            method.Accept(this, new Options {
                InClassDefinition = true
            });
        }
        SymbolTable.Types = previousTypeTable;
        return(null);
    }
Exemple #2
0
        public object VisitClassStmt(Stmt.ClassDefinition obj, object options)
        {
            StringBuilder builder = new();

            builder.Append($"({obj.token.lexeme}: ");
            List <string> memberStr = new();

            foreach (Stmt.Var memb in obj.members)
            {
                memberStr.Add((string)memb.Accept(this, null));
            }
            builder.Append(Parenthesize2("members: ", memberStr.ToArray()));
            List <string> methodStr = new();

            foreach (Stmt.Function memb in obj.methods)
            {
                methodStr.Add((string)memb.Accept(this, null));
            }
            builder.Append(Parenthesize2("methods:", methodStr.ToArray()));
            builder.Append(')');
            return(builder.ToString());
        }