//============================================================ //------------------------------------------------------------ // シンボルツリーのエラーを表示する。 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(); }
//------------------------------------------------------------ // 実行関数。 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(); } }