pascalabcnet/VisualPlugins/SemanticTreeVisualisator/Source/SemanicTreeVisualisatorForm.cs
Бондарев Иван e6e67c193c initial commit
2015-05-14 21:35:07 +02:00

207 lines
9.8 KiB
C#
Raw Blame History

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using PascalABCCompiler.Errors;
using PascalABCCompiler.SemanticTree;
using System.Collections;
namespace VisualPascalABCPlugins
{
public partial class SemanticTreeVisualisatorForm : Form
{
public IVisualEnvironmentCompiler VisualEnvironmentCompiler;
public SematicTreeVisitor Visitor;
public SemanticTreeVisualisatorForm()
{
InitializeComponent();
PascalABCCompiler.StringResources.SetTextForAllObjects(this, SyntaxTreeVisualisator_VisualPascalABCPlugin.StringsPrefix);
}
private void SyntaxTreeVisualisatorForm_Load(object sender, EventArgs e)
{
}
private void SyntaxTreeVisualisatorForm_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Visible = false;
}
private void SyntaxTreeVisualisatorForm_Shown(object sender, EventArgs e)
{
VisualEnvironmentCompiler.StandartCompiler.OnChangeCompilerState += new PascalABCCompiler.ChangeCompilerStateEventDelegate(Compiler_OnChangeCompilerState);
treeView.Nodes.Clear();
}
bool BuildButtonsEnabled
{
set
{
tbRebuild.Enabled = tbBuild.Enabled = value;
}
get
{
return tbRebuild.Enabled;
}
}
void Compiler_OnChangeCompilerState(PascalABCCompiler.ICompiler sender, PascalABCCompiler.CompilerState State, string FileName)
{
switch (State)
{
case PascalABCCompiler.CompilerState.CompilationStarting:
BuildButtonsEnabled = false;
this.Refresh();
break;
case PascalABCCompiler.CompilerState.CompilationFinished:
ShowTree();
BuildButtonsEnabled = true;
break;
}
}
public void ShowTree()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>.
try
{
PascalABCCompiler.SemanticTree.IProgramNode Root = VisualEnvironmentCompiler.StandartCompiler.SemanticTree;
treeView.Nodes.Clear();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Visitor <20> treeView.Nodes
Visitor = new SematicTreeVisitor(treeView.Nodes);
Visitor.CreateMyDictionaries();
Visitor.setTreeView(treeView);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
Root.visit(Visitor);
//Visitor.visit(Root, treeView.Nodes);
//Visitor.visit(Root);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
Visitor.makeUpRows(treeView);
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Nodes[0]
treeView.SelectedNode = treeView.Nodes[0];
//treeView.SelectedNode.BackColor = Color.Chocolate;
//treeView.Invalidate();
treeView.Invalidate();
treeView.Refresh();
treeView.Update();
}
catch (Exception e)
{
VisualEnvironmentCompiler.ExecuteAction(VisualEnvironmentCompilerAction.AddTextToCompilerMessages, "SemanticVisualisator Exception: " + e.ToString());
}
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
VisualEnvironmentCompiler.StandartCompiler.InternalDebug.CodeGeneration = false;
PascalABCCompiler.CompilerType ct = VisualEnvironmentCompiler.DefaultCompilerType;
VisualEnvironmentCompiler.DefaultCompilerType = PascalABCCompiler.CompilerType.Standart;
VisualEnvironmentCompiler.ExecuteAction(VisualEnvironmentCompilerAction.Build, null);
VisualEnvironmentCompiler.DefaultCompilerType = ct;
VisualEnvironmentCompiler.StandartCompiler.InternalDebug.CodeGeneration = true;
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
VisualEnvironmentCompiler.StandartCompiler.InternalDebug.CodeGeneration = false;
PascalABCCompiler.CompilerType ct = VisualEnvironmentCompiler.DefaultCompilerType;
VisualEnvironmentCompiler.DefaultCompilerType = PascalABCCompiler.CompilerType.Standart;
VisualEnvironmentCompiler.ExecuteAction(VisualEnvironmentCompilerAction.Rebuild, null);
VisualEnvironmentCompiler.DefaultCompilerType = ct;
VisualEnvironmentCompiler.StandartCompiler.InternalDebug.CodeGeneration = true;
}
private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
Visitor.visitSelectedNode(treeView.SelectedNode);
treeView.Invalidate();
treeView.Refresh();
treeView.Update();
TreeNode tn = treeView.SelectedNode;
mylabel.Text = "";
PascalABCCompiler.SemanticTree.ISemanticNode semantic_tree_node = tn.Tag as PascalABCCompiler.SemanticTree.ISemanticNode;
//PascalABCCompiler.SyntaxTree.syntax_tree_node syntax_tree_node = tn.Tag as PascalABCCompiler.SyntaxTree.syntax_tree_node;
//if (syntax_tree_node.source_context == null) return;
if (semantic_tree_node == null) return;
PascalABCCompiler.SemanticTree.ILocated lt = semantic_tree_node as PascalABCCompiler.SemanticTree.ILocated;
if (lt == null) return;
if (lt.Location == null) return;
//StatusLabel.Text = semantic_tree_node.ToString() + String.Format("({0},+{1})--({2},+{3})", lt.Location.begin_column_num, lt.Location.begin_line_num, lt.Location.end_column_num, lt.Location.end_line_num);
string s = String.Format("({0},+{1})--({2},+{3})", lt.Location.begin_line_num, lt.Location.begin_column_num, lt.Location.end_line_num, lt.Location.end_column_num);
mylabel.Text = s;
mylabel.Invalidate();
treeView.Invalidate();
//StatusLabel.Text = syntax_tree_node.source_context.ToString() + string.Format("({0},+{1})", syntax_tree_node.source_context.Position, syntax_tree_node.source_context.Length);
//if (syntax_tree_node.source_context.FileName != null)
// StatusLabel.Text += Path.GetFileName(syntax_tree_node.source_context.FileName);
//if (Errors.Count > 0)
// if (Errors[syntax_tree_node] != null)
// StatusLabel.Text += string.Format(" [BAD{0}]", Errors[syntax_tree_node]);
//this.VisualEnvironmentCompiler.ExecuteSourceLocationAction(
// PascalABCCompiler.Tools.ConvertSourceContextToSourceLocation((syntaxTreeSelectComboBox.SelectedItem as SyntaxTreeSelectComboBoxItem).FileName, syntax_tree_node.source_context),
// SourceLocationAction.SelectAndGotoBeg);
Visitor.visitSelectedNode(treeView.SelectedNode);
treeView.Invalidate();
//treeView.Refresh();
//treeView.Update();
}
/* private void treeView_Click(object sender, EventArgs e)
{
Visitor.visitSelectedNode(treeView.SelectedNode);
treeView.Invalidate();
treeView.Refresh();
treeView.Update();
TreeNode tn = treeView.SelectedNode;
mylabel.Text = "";
PascalABCCompiler.SemanticTree.ISemanticNode semantic_tree_node = tn.Tag as PascalABCCompiler.SemanticTree.ISemanticNode;
//PascalABCCompiler.SyntaxTree.syntax_tree_node syntax_tree_node = tn.Tag as PascalABCCompiler.SyntaxTree.syntax_tree_node;
//if (syntax_tree_node.source_context == null) return;
if (semantic_tree_node == null) return;
PascalABCCompiler.SemanticTree.ILocated lt = semantic_tree_node as PascalABCCompiler.SemanticTree.ILocated;
if (lt == null) return;
if (lt.Location == null) return;
//StatusLabel.Text = semantic_tree_node.ToString() + String.Format("({0},+{1})--({2},+{3})", lt.Location.begin_column_num, lt.Location.begin_line_num, lt.Location.end_column_num, lt.Location.end_line_num);
string s = String.Format("({0},+{1})--({2},+{3})", lt.Location.begin_line_num, lt.Location.begin_column_num, lt.Location.end_line_num, lt.Location.end_column_num);
mylabel.Text = s;
mylabel.Invalidate();
treeView.Invalidate();
//StatusLabel.Text = syntax_tree_node.source_context.ToString() + string.Format("({0},+{1})", syntax_tree_node.source_context.Position, syntax_tree_node.source_context.Length);
//if (syntax_tree_node.source_context.FileName != null)
// StatusLabel.Text += Path.GetFileName(syntax_tree_node.source_context.FileName);
//if (Errors.Count > 0)
// if (Errors[syntax_tree_node] != null)
// StatusLabel.Text += string.Format(" [BAD{0}]", Errors[syntax_tree_node]);
//this.VisualEnvironmentCompiler.ExecuteSourceLocationAction(
// PascalABCCompiler.Tools.ConvertSourceContextToSourceLocation((syntaxTreeSelectComboBox.SelectedItem as SyntaxTreeSelectComboBoxItem).FileName, syntax_tree_node.source_context),
// SourceLocationAction.SelectAndGotoBeg);
Visitor.visitSelectedNode(treeView.SelectedNode);
treeView.Invalidate();
treeView.Refresh();
treeView.Update();
}*/
}
}