Exemple #1
0
        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));
            }
        }
Exemple #2
0
        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}");
        }