Пример #1
0
 public string Dump(AstProgram root)
 {
     Visit(root);
     string result = m_builder.ToString();
     m_builder.Clear();
     return result;
 }
Пример #2
0
        public AstProgram ParseProgram()
        {
            var program = new AstProgram();

            while (!CurTokenIs(TokenType.Eof))
            {
                var statement = ParseStatement();
                if (statement != null)
                {
                    program.Statements.Add(statement);
                }
                NextToken();
            }

            return(program);
        }
Пример #3
0
        public string GenerateByteCode(AstProgram program)
        {
            var scope = new Scope {
                Program = program, LocalTable = new LocalTable()
            };

            CompileStatements(program.Statements, scope, scope.LocalTable);

            var output = new StringBuilder();

            foreach (var instructionSet in InstructionSets)
            {
                output.Append(instructionSet.Compile());
            }

            return(RemoveEmptyLine(output.ToString()).Trim());
        }
Пример #4
0
 public Generator(AstProgram program)
 {
     Program = program;
 }
Пример #5
0
 public override bool Visit(AstProgram node)
 {
     Log(node.ToString());
     return true;
 }
Пример #6
0
        public void loadTree(ref AstProgram Prog)
        {
            Small_PL_AstTreeView.Nodes.Clear();
            var root = new TreeNode();

            if (PSER.ParserErrors.Count > 0)
            {
                root.ForeColor = Color.Red;
            }
            else
            {
                root.ForeColor = Color.GreenYellow;
            }

            root.Text = Prog._TypeStr + Constants.vbNewLine;
            root.Tag  = EXT.FormatJsonOutput(Prog.ToJson());
            var Body = new TreeNode();

            Body.Text = "Body";
            Body.Tag  = EXT.FormatJsonOutput(Prog.ToJson());
            foreach (var item in Prog.Body)
            {
                var MainNode = new TreeNode();
                MainNode.Text = EXT.FormatJsonOutput(item.ToJson());
                MainNode.Tag  = EXT.FormatJsonOutput(item.ToJson());
                var RawNode = new TreeNode();
                if (PSER.ParserErrors.Count > 0)
                {
                    RawNode.ForeColor = Color.Red;
                }
                else
                {
                    RawNode.ForeColor = Color.GreenYellow;
                }

                RawNode.Text = "_Raw :" + item._Raw;
                RawNode.Tag  = "_raw";
                MainNode.Nodes.Add(RawNode);
                var _StartNode = new TreeNode();
                _StartNode.Text = "_Start :" + item._Start;
                _StartNode.Tag  = "_Start";
                MainNode.Nodes.Add(_StartNode);
                var _EndNode = new TreeNode();
                _EndNode.Text = "_End :" + item._End;
                _EndNode.Tag  = "_End";
                MainNode.Nodes.Add(_EndNode);
                var _TypeNode = new TreeNode();
                if (PSER.ParserErrors.Count > 0)
                {
                    _TypeNode.ForeColor = Color.Red;
                }
                else
                {
                    _TypeNode.ForeColor = Color.GreenYellow;
                }

                _TypeNode.Text = "_Type :" + item._TypeStr;
                _TypeNode.Tag  = "_Type";
                MainNode.Nodes.Add(_TypeNode);
                Body.Nodes.Add(MainNode);
            }

            root.Nodes.Add(Body);
            Small_PL_AstTreeView.Nodes.Add(root);
            Small_PL_AstTreeView.ExpandAll();
        }