public WordLangResults(string src)
        {
            src = src.Replace("‘", "'");
            src = src.Replace("’", "'");
            src = src.Replace("–", "-");
            src = src.Replace("+", "+");

            var inputStream = new AntlrInputStream(src);
            var lexer       = new WordLangLexer(inputStream);

            lexer.AddErrorListener(LexerErrors);

            var tokenInputStream = new AntlrInputStream(src);
            var lexerForTokens   = new WordLangLexer(tokenInputStream);

            Tokens = lexerForTokens.GetAllTokens();

            var tokenStream = new CommonTokenStream(lexer);

            var parser = new WordLangParser(tokenStream);

            parser.AddErrorListener(ParserErrors);

            ProgramContext = parser.prog();
        }
示例#2
0
        public LexerErrorListener GetLexerErrors(string src)
        {
            var lexerErrorHandler = new LexerErrorListener();

            var inputStream = new AntlrInputStream(src);
            var lexer       = new WordLangLexer(inputStream);

            lexer.AddErrorListener(lexerErrorHandler);

            var tokenStream = new CommonTokenStream(lexer);
            var tokens      = lexer.GetAllTokens();

            return(lexerErrorHandler);
        }
示例#3
0
        public Tuple <ParserErrorListener, LexerErrorListener> GetParseErrors(string src)
        {
            var lexerErrorHandler = new LexerErrorListener();

            var inputStream = new AntlrInputStream(src);
            var lexer       = new WordLangLexer(inputStream);

            lexer.AddErrorListener(lexerErrorHandler);

            var tokenStream = new CommonTokenStream(lexer);

            var parseErrorHandler = new ParserErrorListener();
            var parser            = new WordLangParser(tokenStream);

            parser.AddErrorListener(parseErrorHandler);

            var ctx = parser.prog();

            return(new Tuple <ParserErrorListener, LexerErrorListener>(parseErrorHandler, lexerErrorHandler));
        }
示例#4
0
        public WordLangCompilerResults Compile(string src, VariableCollection variabels)
        {
            try
            {
                var results = new WordLangCompilerResults();

                var lexerErrorListener  = new LexerErrorListener();
                var parserErrorListener = new ParserErrorListener();
                src = src.Replace("‘", "'");
                src = src.Replace("’", "'");
                src = src.Replace("–", "-");
                src = src.Replace("+", "+");


                var inputStream = new AntlrInputStream(src);

                var lexer = new WordLangLexer(inputStream);
                lexer.AddErrorListener(lexerErrorListener);

                var tokenStream = new CommonTokenStream(lexer);



                var parser = new WordLangParser(tokenStream);
                parser.AddErrorListener(parserErrorListener);

                var program = parser.prog();


                var errorVisitor = new ProgramToErrors(variabels);


                var generalErrors = new List <GeneralError>();
                generalErrors.AddRange(lexerErrorListener.Errors);
                generalErrors.AddRange(parserErrorListener.Errors);

                if (ConfigHelper.Config.OptionValidateVariables)
                {
                    var variableVisitor = new ProgramToVariableErrors(variabels);
                    var variableErrors  = variableVisitor.Visit(program);
                    generalErrors.AddRange(variableErrors);
                }

                if (generalErrors.Count == 0)
                {
                    var detectedErrors = errorVisitor.Visit(program);
                    generalErrors.AddRange(detectedErrors);
                    var ast = _toAST.Visit(program) as AST.RuleSet;
                    if (ast == null)
                    {
                        generalErrors.Add(new GeneralError()
                        {
                            Message = "Fatal AST Parse Error."
                        });
                    }
                    else
                    {
                        _errorChecks.ForEach(errorChecker =>
                        {
                            generalErrors.AddRange(errorChecker.Check(ast));
                        });

                        results.AST  = ast;
                        results.JSON = _toJSON.Visit(program);
                    }
                }
                results.Errors = generalErrors;

                return(results);
            } catch (Exception ex)
            {
                Console.WriteLine("Error occured in compilation" + ex);
                throw ex;
            }
        }