[antlr-interest] Grammar for Predicate Logic (FOL)
Stephan Opfer
stephan.opfer at gmx.net
Fri Apr 20 09:38:18 PDT 2012
Hi Eric,
thx for the advice. Right now, I am just heading this way, because this
not that perfect grammar is already enough make some basic tests.
I was looking for grammars, but only in the context of ANTLR. The second
source is inaccessible to me.
Stephan
On 04/20/2012 06:21 PM, Eric wrote:
> Hi Stephan,
>
>
> Have you looked at other FOL grammars on the internet?
>
> i.e. https://www.cs.uiowa.edu/~hzhang/c145/notes/08a-fol-4p.pdf
>
> or 140.122.185.120/.../AI2008-Lecture10-First-Order%20Logic.pdf
> <http://140.122.185.120/.../AI2008-Lecture10-First-Order%20Logic.pdf>
>
> As a suggestion, you might want to design and test the engine then
> concentrate on the grammar. If you start on the grammar you may be
> tempted to modify the engine to accommodate the grammar. IMHO the
> grammar should accommodate the engine.
>
> Eric
>
>
>
> On Fri, Apr 20, 2012 at 10:37 AM, Stephan Opfer <stephan.opfer at gmx.net
> <mailto:stephan.opfer at gmx.net>> wrote:
>
> Hi,
>
> I think I created a grammar, which accepts prepositional logic and first
> order logic. the only problem I see at the moment, is that quantifiers
> are not the parent, but siblings of their scope.
>
> I have an example input:
>
> Exists ?x (Forall ?y Check(?y) & HasRelation(?x, ?y)) & (Exists ?y
> NoCheck(?y) & HasNoRelation(?x, ?y))<EOF>
>
> Exists ?x is a sibling of the & between the parenthesed formulas, but I
> want ?x to be parent of this &. The problem is at the second alternative
> of the element rule. Here is the grammar:
>
> grammar FOLFUL;
>
> options{
> language=Java;
> output=AST;
> }
>
> tokens{
> LPAREN='(';
> RPAREN= ')';
> AND= '&';
> OR= '|';
> NOT= '!';
> FORALL= 'Forall';
> EXISTS= 'Exists';
> }
>
>
> /*------------------------------------------------------------------
> * PARSER RULES
> *------------------------------------------------------------------*/
>
> condition: formula EOF!;
>
> formula: conjunction (OR^ conjunction)*;
>
> conjunction: element (AND^ element)*;
>
> element : NOT^? atom
> | NOT^? quantifier formula
> | NOT^? LPAREN! formula RPAREN!
> ;
>
> quantifier : (FORALL^ | EXISTS^) VARIABLE;
>
> atom : PREPOSITION^ tuple?;
>
> tuple : LPAREN! (CONSTANT | VARIABLE) (','!(CONSTANT | VARIABLE))*
> RPAREN! ;
>
>
> /*------------------------------------------------------------------
> * LEXER RULES
> *------------------------------------------------------------------*/
>
> VARIABLE: '?' (('a'..'z') | ('0'..'9')) CHARACTER*;
>
> CONSTANT: (('a'..'z') | ('0'..'9')) CHARACTER*;
>
> PREPOSITION: ('A'..'Z') CHARACTER*;
>
> CHARACTER: ('0'..'9' | 'a'..'z' | 'A'..'Z' | '_');
>
> WS : (' ' | '\t' | '\r' | '\n')+ {$channel = HIDDEN;};
>
> Best Regards,
> Stephan
>
>
>
> On 04/19/2012 11:37 PM, Stephan Opfer wrote:
> > Oh! Thanks Jim! That was easy :)
> >
> > On 04/19/2012 11:16 PM, Jim Idle wrote:
> >> language=Java; // Case sensitive.
> >>
> >> Jim
> >>
>
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe:
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
>
More information about the antlr-interest
mailing list