示例#1
0
        public object Evaluate(string formula)
        {
            if (string.IsNullOrEmpty(formula))
            {
                return(0);
            }

            var inputStream = new AntlrInputStream(formula);
            var lexer       = new FormulaLexer(inputStream);
            var tokens      = new CommonTokenStream(lexer);
            var parser      = new FormulaParser(tokens);

            var errorListener = new FormulaErrorListener();

            parser.RemoveErrorListeners();
            parser.AddErrorListener(errorListener);
            var parseTree = parser.main();

            if (!errorListener.IsValid)
            {
                throw new FormulaException(
                          errorListener.ErrorLocation,
                          errorListener.ErrorMessage);
            }

            return(new EvaluationVisitor(Functions).VisitMain(parseTree));
        }
示例#2
0
        static void Main(string[] args)
        {
            string parsedString      = @"\to ((P\supset Q)\supset P)\supset P";
            var    inputStream       = new AntlrInputStream(parsedString);
            var    lexer             = new FormulaLexer(inputStream);
            var    commonTokenStream = new CommonTokenStream(lexer);
            var    parser            = new FormulaParser(commonTokenStream);
            var    listener          = new FormulaListener();

            parser.AddParseListener(listener);
            var graphContext = parser.equation();

            To to = (To)listener.getTree();

            Console.WriteLine(to.getDebugString());
            Console.WriteLine(to.getString());
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine();
            Proof proof = new Proof(to);

            Console.WriteLine("Input: " + parsedString);
            Console.WriteLine("Proof: " + proof.getProof());
            Console.ReadKey();
        }
        /// <summary>
        /// 翻译公式
        /// </summary>
        /// <param name="formula">公式</param>
        /// <param name="availableMethodsType">包含公式中可用静态方法的类型</param>
        /// <returns></returns>
        public string Interpret(string formula, Type availableMethodsType)
        {
            AntlrInputStream input = new AntlrInputStream(formula);
            FormulaLexer     lexer = new FormulaLexer(input);

            lexer.RemoveErrorListeners();
            lexer.AddErrorListener(LexerErrorListener.Instance);
            CommonTokenStream tokens = new CommonTokenStream(lexer);
            FormulaParser     parser = new FormulaParser(tokens);

            parser.RemoveErrorListeners();
            parser.AddErrorListener(ParserErrorListener.Instance);
            FormulaCSListener listener = new FormulaCSListener(availableMethodsType);

            ParseTreeWalker walker = new ParseTreeWalker();

            walker.Walk(listener, parser.formula());
            return(listener.Result);
        }