public static RawRsfScript ParseScript(string scriptData) { var script = new RawRsfScript(); var stream = new AntlrInputStream(scriptData); var lexer = new RabotoraScriptFormatLexer(stream); var lexerErrorListener = new RsfErrorListener <int>(script); lexer.RemoveErrorListeners(); lexer.AddErrorListener(lexerErrorListener); var tokens = new CommonTokenStream(lexer); var parser = new RabotoraScriptFormatParser(tokens) { BuildParseTree = true }; var parserErrorListener = new RsfErrorListener <IToken>(script); parser.RemoveErrorListeners(); parser.AddErrorListener(parserErrorListener); var tree = parser.script(); if (script.Error.Count == 0) { ParseTreeWalker.Default.Walk(new RsfTypeChecker(script), tree); } string warningStr = string.Join('\n', script.Warning); string errorStr = string.Join('\n', script.Error); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(warningStr); Console.ForegroundColor = ConsoleColor.Red; Console.Error.WriteLine(errorStr); Console.ResetColor(); Console.WriteLine($" {script.Error} error(s), {script.Warning} warning(s)"); return(script); }
private RabotoraScript(string scriptName, string scriptPath, RawRsfScript script) { ScriptName = scriptName; ScriptPath = scriptPath; RawScript = script; }
public RsfErrorListener(RawRsfScript script, int lineOffset = 0) { LineOffset = lineOffset; Script = script; }
public RsfTypeChecker(RawRsfScript script) { Script = script; }