Exemple #1
0
            // Add code to this case clause.
            public void AddCode(ast.Statement statement)
            {
                // First time?
                if (Code == null)
                {
                    Code = new ast.CodeBlock(statement.Bookmark, TriState.No);
                }

                Code.AddStatement(statement);
            }
        static void addMacro(ast.Statement stmt, Object.Environment env)
        {
            ast.LetStatement letStatement = (ast.LetStatement)stmt;
            ast.MacroLiteral macroLiteral = (ast.MacroLiteral)letStatement.Value;

            Object.Macro macro = new Object.Macro
            {
                Parameters = macroLiteral.Parameters,
                Env        = env,
                Body       = macroLiteral.Body
            };

            env.Set(letStatement.Name.Value, macro);
        }
        static bool isMacroDefenition(ast.Statement node)
        {
            if (!(node is ast.LetStatement))
            {
                return(false);
            }
            ast.LetStatement letStatement = (ast.LetStatement)node;

            if (!(letStatement.Value is ast.MacroLiteral))
            {
                return(false);
            }

            return(true);
        }
Exemple #4
0
        public ast.Program ParseProgram()
        {
            ast.Program program = new ast.Program {
            };
            program.Statements = new List <ast.Statement>();

            while (!curTokenIs(token.EOF))
            {
                ast.Statement stmt = parseStatement();
                if (stmt != null)
                {
                    program.Statements.Add(stmt);
                }
                nextToken();
            }

            return(program);
        }
        public static void DefineMacros(ast.Program program, Object.Environment env)
        {
            List <int> defenitions = new List <int>();

            for (int i = 0; i < program.Statements.Count; i++)
            {
                ast.Statement statement = program.Statements[i];
                if (isMacroDefenition(statement))
                {
                    addMacro(statement, env);
                    defenitions.Add(i++);
                }
            }

            for (int i = defenitions.Count - 1; i >= 0; i--)
            {
                int defenitionIndex = defenitions[i];
                program.Statements.RemoveAt(defenitionIndex);
            }
        }
Exemple #6
0
        static ast.BlockStatement parseBlockStatement()
        {
            ast.BlockStatement block = new ast.BlockStatement {
                Token = curToken
            };
            block.Statements = new List <ast.Statement>();

            nextToken();

            while (!curTokenIs(token.RBRACE) && !curTokenIs(token.EOF))
            {
                ast.Statement stmt = parseStatement();
                if (stmt != null)
                {
                    block.Statements.Add(stmt);
                }
                nextToken();
            }

            return(block);
        }