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(); }
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); }
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)); }
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; } }