示例#1
0
        //============================================================

        //------------------------------------------------------------
        // シンボルツリーのエラーを表示する。
        static void dumpSymbolTreeErrorInfo(SymbolTree aSymbolTree)
        {
            System.Console.Error.Write(
                "###########################################################" + System.Environment.NewLine
                + "# SymbolTreeError:" + aSymbolTree.GetErrorInfo().Kind.ToString() + System.Environment.NewLine
                + "#   line: " + aSymbolTree.GetErrorInfo().Token.posLine + System.Environment.NewLine
                + "#    col: " + aSymbolTree.GetErrorInfo().Token.posColumn + System.Environment.NewLine
                + "###########################################################" + System.Environment.NewLine
                );
            Assert.NotReachHere();
        }
示例#2
0
        //------------------------------------------------------------
        // 実行関数。
        static public void Execute()
        {
            // テストケースを集める
            List <TestRecipe> testCaseList = new List <TestRecipe>();

            testCaseList.Add(testAdd());

            // テストを実行
            foreach (var entry in testCaseList)
            {
                // シンボル作成
                SymbolTree symbolTree = new SymbolTree();

                // モジュールを追加
                foreach (var code in entry.CodeRepos)
                {
                    // Lexer
                    var lexer = new Lexer(code);
                    if (lexer.IsError())
                    {
                        System.Console.Error.Write(
                            "###########################################################" + System.Environment.NewLine
                            + "# LexerError:" + lexer.GetErrorInfo().ErrorKind.ToString() + System.Environment.NewLine
                            + "#   line: " + lexer.GetErrorInfo().Line + System.Environment.NewLine
                            + "#    col: " + lexer.GetErrorInfo().Column + System.Environment.NewLine
                            + "###########################################################" + System.Environment.NewLine
                            );
                        Assert.NotReachHere();
                    }

                    // Parser
                    var parser = new Parser(lexer);
                    if (parser.GetErrorKind() != Parser.ErrorKind.NONE)
                    {
                        System.Console.Error.Write(
                            "###########################################################" + System.Environment.NewLine
                            + "# ParserError:" + parser.GetErrorKind().ToString() + System.Environment.NewLine
                            + "#   line: " + parser.GetErrorToken().posLine + System.Environment.NewLine
                            + "#    col: " + parser.GetErrorToken().posColumn + System.Environment.NewLine
                            + "###########################################################" + System.Environment.NewLine
                            );
                        Assert.NotReachHere();
                    }

                    // Add
                    if (!symbolTree.Add(parser.ModuleContext))
                    {
                        dumpSymbolTreeErrorInfo(symbolTree);
                    }
                }

                // 展開
                if (!symbolTree.Expand())
                {
                    dumpSymbolTreeErrorInfo(symbolTree);
                }
                Assert.Check(symbolTree.GetErrorInfo().Kind == SymbolTree.ErrorKind.NONE);

                // 各モジュールをダンプ
                symbolTree.XDataDump();
            }
        }