feat: temporary grammar
This commit is contained in:
@@ -3,20 +3,17 @@ using Antlr4.Runtime.Atn;
|
||||
using Antlr4.Runtime.Tree;
|
||||
using InkBlot.ParseHierarchy;
|
||||
using InkBlot.Visitor;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace InkBlot;
|
||||
|
||||
public class InkBlotParser
|
||||
{
|
||||
public (Story, IEnumerable<Diagnostic>) Parse(IFileReader fileReader, string mainFileName)
|
||||
public static (Story, IEnumerable<Diagnostic>) Parse(IFileReader fileReader, ILoggerFactory loggerFactory,
|
||||
string mainFileName)
|
||||
{
|
||||
var stream = fileReader.GetContents(mainFileName);
|
||||
var inputStream = new AntlrInputStream(stream);
|
||||
var lexer = new InkBlotAntlrGrammarLexer(inputStream);
|
||||
var lexerErrorListener = new LexerErrorListener();
|
||||
lexer.RemoveErrorListeners();
|
||||
lexer.AddErrorListener(lexerErrorListener);
|
||||
var tokens = new CommonTokenStream(lexer);
|
||||
var tokens = GetTokenStream(fileReader, mainFileName, out var lexerErrorListener);
|
||||
|
||||
var parser = new InkBlotAntlrGrammarParser(tokens);
|
||||
var parserErrorListener = new ParserErrorListener();
|
||||
parser.RemoveErrorListeners();
|
||||
@@ -26,9 +23,27 @@ public class InkBlotParser
|
||||
parser.Interpreter.PredictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION;
|
||||
#endif
|
||||
var tree = parser.story();
|
||||
var listener = new Listener();
|
||||
var listener = new Listener(loggerFactory.CreateLogger<Listener>());
|
||||
var walker = new ParseTreeWalker();
|
||||
walker.Walk(listener, tree);
|
||||
return (listener.Story, lexerErrorListener.Diagnostics.Concat(parserErrorListener.Diagnostics));
|
||||
}
|
||||
|
||||
private static CommonTokenStream GetTokenStream(IFileReader fileReader, string mainFileName,
|
||||
out LexerErrorListener lexerErrorListener)
|
||||
{
|
||||
var stream = fileReader.GetContents(mainFileName);
|
||||
var inputStream = new AntlrInputStream(stream);
|
||||
var lexer = new InkBlotAntlrGrammarLexer(inputStream);
|
||||
lexerErrorListener = new LexerErrorListener();
|
||||
lexer.RemoveErrorListeners();
|
||||
lexer.AddErrorListener(lexerErrorListener);
|
||||
var tokens = new CommonTokenStream(lexer);
|
||||
return tokens;
|
||||
}
|
||||
|
||||
public static CommonTokenStream GetTokenStream(IFileReader fileReader, string mainFileName)
|
||||
{
|
||||
return GetTokenStream(fileReader, mainFileName, out _);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user