public string Dump(AstProgram root) { Visit(root); string result = m_builder.ToString(); m_builder.Clear(); return result; }
public AstProgram ParseProgram() { var program = new AstProgram(); while (!CurTokenIs(TokenType.Eof)) { var statement = ParseStatement(); if (statement != null) { program.Statements.Add(statement); } NextToken(); } return(program); }
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()); }
public Generator(AstProgram program) { Program = program; }
public override bool Visit(AstProgram node) { Log(node.ToString()); return true; }
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(); }