[antlr-interest] Grammar for Predicate Logic (FOL)
Stephan Opfer
stephan.opfer at gmx.net
Fri Apr 20 07:37:53 PDT 2012
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
>>
More information about the antlr-interest
mailing list