[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