public override void ExitHeader(PropositionalCalculusParser.HeaderContext context) { for (int ind = 0; ind < context.ChildCount - 2; ind += 2) { proposals.Add(context.children[ind]); } }
public override void ExitProof(PropositionalCalculusParser.ProofContext context) { foreach (var child in context.children.Where(tree => tree is PropositionalCalculusParser.ExpressionContext)) { Axioms.Add(new Axiom(child)); } }
private void Init() { var inputStream = new AntlrInputStream(new System.IO.StreamReader(_filename)); var lexer = new PropositionalCalculusLexer(inputStream); var tokenStream = new CommonTokenStream(lexer); _parser = new PropositionalCalculusParser(tokenStream) { BuildParseTree = true }; _tree = _parser.text(); }
public override void ExitProof(PropositionalCalculusParser.ProofContext context) { for (int ind = 0; ind < context.children.Count; ind+=2) { var expr = context.children[ind]; bool flag = false; //Checking axioms for (int axiom_i = 0; axiom_i < storage.Count && !flag; axiom_i++) { var axiom = storage[axiom_i]; if (axiom.Match(expr)) { Proof.Add(new Result(expr.GetText(),Result.AnnotationBuilder.Axiom(axiom_i+1))); flag = true; } } //Checking proposals for (int p = 0; p < proposals.Count && !flag; p++) { if (proposals[p].Same(expr)) { flag = true; Proof.Add(new Result(expr.GetText(), Result.AnnotationBuilder.Proposal(p + 1))); } } //Checking M.P. for (int j = ind; j >= 0 && !flag; j -= 2) { var candidate = context.children[j].Collapse(); if (!candidate.IsImplication()) continue; var p2 = candidate.GetChild(2); if (!p2.Same(expr)) continue; var p1 = candidate.GetChild(0); //Need to find index of p1 for (int i = ind; i >= 0; i -= 2) { if (p1.Same(context.children[i])) { //Success flag = true; Proof.Add(new Result(expr.GetText(),Result.AnnotationBuilder.MP(i/2+1,j/2+1))); break; } } } //If not prooved if (!flag) Proof.Add(new Result(expr.GetText(), Result.AnnotationBuilder.NotProoved())); } }