[antlr-interest] Grammar for Predicate Logic (FOL)

Stephan Opfer stephan.opfer at gmx.net
Sun Apr 22 00:57:35 PDT 2012


Hi JBB,

thank you for your help! The grammar you send look really nice and the
"unnecessary changes" helped me to understand ANTLR a little bit more.

I am not sure, if I want the variable of the quantifier as sibling or
parent of their scope. Maybe its more convenient to have something like this

Exists
  |
  V
  ?x
  |
  V
(formula)

, instead of the version you sent to me

       Exists
  _______|_______
 |               |
 V               V
 ?x          (formula)

I tried to achieve this, but failed, because of several
NoViableAltExceptions. Before I head on to this, I first make the rest
of the software run.

Best Regards,
  Stephan

On 04/20/2012 10:08 PM, John B. Brodie wrote:
> Greetings!
> 
> Attached please find a tested (on just your single sample input string)
> version with the quantifier at a higher precedence that the disjunctive
> operation.
> 
> Basically just moved the quantifier clause higher up in the rule set.
> 
> And sorry but I also made a bunch of unnecessary gratuitous changes
> along the way...
> 
> Hope this helps...
>    -jbb
> 
> On 04/20/2012 10:37 AM, Stephan Opfer 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