Пример #1
0
        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));
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }