예제 #1
0
        public MainForm()
        {
            InitializeComponent();
            backgroundWorker1.DoWork                    += backgroundWorker1_DoWork;
            backgroundWorker1.RunWorkerCompleted        += backgroundWorker1_RunWorkerCompleted;
            backgroundWorker1.WorkerSupportsCancellation = true;
            Grammar.GraphBuilder = mGraphWindow.GraphBuilder;

            //Init DockWindows
            mErrorList = new ErrorList(mGrammarDoc);

            OutputDoc mDebugOutputDoc = null;

            if (Lexer.DebugMode)
            {
                mDebugOutputDoc               = new OutputDoc();
                mDebugOutputDoc.TabText       = "Lexer Debug";
                mGrammarDoc.mLexerDebugOutput = mDebugOutputDoc;
            }

            if (!LoadDockFromCfg())
            {
                mErrorList.Show(dockPanel1, DockState.DockBottomAutoHide);
                mDerivationTree.Show(dockPanel1, DockState.DockLeftAutoHide);
                mGraphWindow.Show(dockPanel1, DockState.DockLeftAutoHide);
                mLevelListDoc.Show(dockPanel1, DockState.DockLeftAutoHide);

                if (Lexer.DebugMode)
                {
                    mDebugOutputDoc.Show(dockPanel1, DockState.Document);
                }
                mOutputDoc.Show(dockPanel1, DockState.Document);

                mTaskDoc.Show(dockPanel1, DockState.DockLeft);
                mGenerationOptionsForm.Show(dockPanel1, DockState.DockLeft);
                mGrammarDoc.Show(dockPanel1, DockState.DockLeft);
            }

            mTaskDoc.Init();
            mGrammarDoc.Init();
            mGrammarDoc.mDerivationTree = mDerivationTree;

            mGenerationMode = eGenerationMode.IterativeTopDown;
            iterativeTopDownToolStripMenuItem.Checked       = true;
            recursiveTopDownToolStripMenuItem.ToolTipText   = "Рекурсивный обход сверху вниз, слева направо";
            iterativeTopDownToolStripMenuItem.ToolTipText   = @"Обход такой же, как и RecursiveTopDown, только выполняется итеративно, чтобы избежать возможности StackOverflow
Это основной рекомендуемый режим, поскольку он необходим для реализации семантических связей (обращение к уже выведенной части программы).";
            iterativeLeftRightToolStripMenuItem.ToolTipText = @"Вывод по слоям (слева направо сверху вниз).
Для демонстрации";

            mLevelListDoc.OutputDoc = mOutputDoc;
        }