public static string Execute(string input) { var inputStream = CharStreams.fromstring(input); var lexer = new calcLexer(inputStream); var tokenStream = new CommonTokenStream(lexer); var parser = new calcParser(tokenStream); var inputTree = parser.input(); var(isSuccess, type, value) = new Visitor().Visit(inputTree); if (isSuccess) { return($"{type}" + ":" + $"{value}"); } else { return(ErrString.GetErrString((ErrID)value)); } }
public static void Main(string[] args) { Syms.init("calc.tokens"); string gdata; using (var r = new StreamReader("terminals.txt")) { gdata = r.ReadToEnd(); } var tokenizer = new Tokenizer(gdata); string idata = Console.ReadLine(); tokenizer.setInput(idata); IList <IToken> tokens = new List <IToken>(); while (true) { Token t = tokenizer.next(); if (t.Symbol == "$") { break; //at end } //CommonToken is defined in the ANTLR runtime CommonToken T = new CommonToken(Syms.stringToInt[t.Symbol], t.Lexeme); T.Line = t.Line; tokens.Add(T); } var antlrtokenizer = new BufferedTokenStream(new ListTokenSource(tokens)); var parser = new calcParser(antlrtokenizer); parser.BuildParseTree = true; //optional: parser.ErrorHandler = new BailErrorStrategy (); //'start' should be the name of the grammar's start symbol var listener = new MyListener(); var walker = new ParseTreeWalker(); var antlrroot = parser.start(); walker.Walk(listener, antlrroot); double v = Annotations.ptp.Get(antlrroot); Console.WriteLine($"{v}"); }