protected AstNode ParseText(string text) { var s = new StreamReader(GenerateStreamFromString(text)); var stm = new AntlrInputStream(s);; var lexer = new TigerLexer(stm); var tokenStream = new CommonTokenStream(lexer); var parser = new TigerParser(tokenStream); var expContext = parser.program(); var contextVisitor = new BuildAstVisitor(); return(expContext.Accept(contextVisitor)); }
/// <summary> /// 引数に与えられたMapGrammarの構文解析を行います。 /// </summary> /// <param name="input">解析する文字列</param> public MapData Parse(string input) { AntlrInputStream inputStream = new AntlrInputStream(input); MapGrammarLexer lexer = new MapGrammarLexer(inputStream); CommonTokenStream commonTokneStream = new CommonTokenStream(lexer); SyntaxDefinitions.MapGrammarParser parser = new SyntaxDefinitions.MapGrammarParser(commonTokneStream); parser.AddErrorListener(ErrorListener); //parser.ErrorHandler = new MapGrammarErrorStrategy(); MapData value = null; var cst = parser.root(); var ast = new BuildAstVisitor().VisitRoot(cst); value = (MapData) new EvaluateMapGrammarVisitor().Visit(ast); return(value); }
/// <summary> /// Compila el codigo que se encuentra en el fichero filename /// </summary> /// <param name="filename">El fichero a compilar</param> /// <param name="typeName">El nombre del tipo que contendra las funciones que se definan</param> /// <returns>Retorna una lista con los errores que se produjeron</returns> private IEnumerable <AnalysisError> Compile(string filename, string typeName) { var s = new StreamReader(filename); var stm = new AntlrInputStream(s);; var lexer = new TigerLexer(stm); var tokenStream = new CommonTokenStream(lexer); var parser = new BengalaParser(tokenStream); parser.ConfigErrorListeners(); var expContext = parser.program(); var contextVisitor = new BuildAstVisitor(); var errorsWarning = parser.Errors; if (parser.NumberOfSyntaxErrors != 0 || parser.Errors.Any()) { return(errorsWarning); } var astRoot = expContext.Accept(contextVisitor); var generalScope = new Scope(null); init = new Inizializator <ILCode>(generalScope); InitScope(generalScope); var errorListener = new BengalaBaseErrorListener(); var staticAnalysisVisitor = new StaticChecker(errorListener, generalScope); astRoot.Accept(staticAnalysisVisitor); if (GenerateCode && !errorListener.Errors.Any()) { CreateCode(FileName(filename), typeName, astRoot); } return(errorListener.Errors); }