| summaryrefslogtreecommitdiff |
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-07-18 10:24:37 +0200 |
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2017-07-18 10:24:37 +0200 |
| commit | be20292006bd783b4589b69b5379aae9429f3b3b (patch) | |
| tree | 0c22bd2fd60b7bd4837252e93771d11a1cc6018c | |
| parent | 31e1948a7f3bf1f7902cd5a0d6d49cef277e73ae (diff) | |
First shot at a grammar for the properties.
| -rw-r--r-- | instr-to-kodkod/parser/PropertyLexer.g4 | 34 | ||||
| -rw-r--r-- | instr-to-kodkod/parser/PropertyParser.g4 | 85 |
2 files changed, 96 insertions, 23 deletions
diff --git a/instr-to-kodkod/parser/PropertyLexer.g4 b/instr-to-kodkod/parser/PropertyLexer.g4 index 27f1bca..159dec1 100644 --- a/instr-to-kodkod/parser/PropertyLexer.g4 +++ b/instr-to-kodkod/parser/PropertyLexer.g4 @@ -1,13 +1,31 @@ lexer grammar PropertyLexer; -TAG_EXISTING_KW: '(tag_existing'; -AND_OPERATOR_KW: '(and'; -OR_OPERATOR_KW: '(or'; -NOT_OPERATOR_KW: '(not'; -EXISTS_OPERATOR_KW: '(exists'; -FORALL_OPERATOR_KW: '(forall'; -ID: [a-zA-Z0-9_]+; +fragment SEP: [ \t\r\n]+; + L_PAREN : '('; R_PAREN : ')'; -WS: [ \t\r\n]+ -> skip; +TAG_EXISTING_KW: '(tag_existing' SEP; + +AND_OPERATOR_KW: '(and' SEP; +OR_OPERATOR_KW: '(or' SEP; +NOT_OPERATOR_KW: '(not' SEP ; +IMPLIES_OPERATOR_KW: '(implies' SEP ; + +EXISTS_OPERATOR_KW: '(exists' SEP; +FORALL_OPERATOR_KW: '(forall' SEP; + +CTL_VERIFIES_OPERATOR_KW: '(CTL_verifies' SEP; + +AX_OPERATOR_KW: '(AX' SEP; +EX_OPERATOR_KW: '(EX' SEP; +AG_OPERATOR_KW: '(AG' SEP; +EG_OPERATOR_KW: '(EG' SEP; +AF_OPERATOR_KW: '(AF' SEP; +EF_OPERATOR_KW: '(EF' SEP; +AU_OPERATOR_KW: '(AU' SEP; +EU_OPERATOR_KW: '(EU' SEP; + +WS: SEP; + +ID: [a-zA-Z0-9_]+; diff --git a/instr-to-kodkod/parser/PropertyParser.g4 b/instr-to-kodkod/parser/PropertyParser.g4 index 740b308..1b32722 100644 --- a/instr-to-kodkod/parser/PropertyParser.g4 +++ b/instr-to-kodkod/parser/PropertyParser.g4 @@ -4,27 +4,82 @@ options { tokenVocab = PropertyLexer; } prog: tag_existing; tag_existing - : TAG_EXISTING_KW L_PAREN (tag_item)+ R_PAREN formula R_PAREN + : TAG_EXISTING_KW L_PAREN (tag_item)+ R_PAREN (WS)* sl_formula (WS)* R_PAREN ; tag_item - : L_PAREN ID ID R_PAREN + : (WS)* L_PAREN (WS)* ID (WS)+ ID (WS)+ ID (WS)* R_PAREN (WS)* ; -formula - : and_operator - | or_operator - | not_operator - | exists_operator - | forall_operator - | predicate +predicate: (WS)* L_PAREN ID ((WS)+ ID)* (WS)* R_PAREN; + +/******************************************************************************/ +/** Structural Level **********************************************************/ +/******************************************************************************/ +/**** First Order Expressions *************************************************/ +sl_and_operator: (WS)* AND_OPERATOR_KW sl_formula (sl_formula)+ (WS)* R_PAREN; +sl_or_operator: (WS)* OR_OPERATOR_KW sl_formula (sl_formula)+ (WS)* R_PAREN; +sl_not_operator: (WS)* NOT_OPERATOR_KW sl_formula (WS)* R_PAREN; +sl_implies_operator: (WS)* IMPLIES_OPERATOR_KW sl_formula sl_formula (WS)* R_PAREN; + +/** Quantified Expressions ****************************************************/ +sl_exists_operator: + (WS)* EXISTS_OPERATOR_KW ID (WS)+ ID sl_formula (WS*) R_PAREN ; -and_operator: AND_OPERATOR_KW formula (formula)+ R_PAREN; -or_operator: OR_OPERATOR_KW formula (formula)+ R_PAREN; -not_operator: NOT_OPERATOR_KW formula R_PAREN; -exists_operator: EXISTS_OPERATOR_KW ID ID formula R_PAREN; -forall_operator: FORALL_OPERATOR_KW ID ID formula R_PAREN; +sl_forall_operator: + (WS)* FORALL_OPERATOR_KW ID (WS)+ ID sl_formula (WS*) R_PAREN +; +/** Special Expressions *******************************************************/ +sl_ctl_verifies_operator: + (WS)* CTL_VERIFIES_OPERATOR_KW ID (WS)* bl_formula (WS)* R_PAREN +; -predicate: L_PAREN ID (ID)* R_PAREN; +/**** Formula Definition ******************************************************/ +sl_formula: + predicate + | sl_and_operator + | sl_or_operator + | sl_not_operator + | sl_implies_operator + | sl_exists_operator + | sl_forall_operator + | sl_ctl_verifies_operator +; + +/******************************************************************************/ +/** Behavioral Level **********************************************************/ +/******************************************************************************/ +/**** First Order Expressions *************************************************/ +bl_and_operator: (WS)* AND_OPERATOR_KW bl_formula (bl_formula)+ (WS)* R_PAREN; +bl_or_operator: (WS)* OR_OPERATOR_KW bl_formula (bl_formula)+ (WS)* R_PAREN; +bl_not_operator: (WS)* NOT_OPERATOR_KW bl_formula (WS)* R_PAREN; +bl_implies_operator: (WS)* IMPLIES_OPERATOR_KW bl_formula bl_formula (WS)* R_PAREN; + +/**** Computation Tree Logic Expressions **************************************/ +bl_ax_operator: (WS)* AX_OPERATOR_KW bl_formula (WS)* R_PAREN; +bl_ex_operator: (WS)* EX_OPERATOR_KW bl_formula (WS)* R_PAREN; +bl_ag_operator: (WS)* AG_OPERATOR_KW bl_formula (WS)* R_PAREN; +bl_eg_operator: (WS)* EG_OPERATOR_KW bl_formula (WS)* R_PAREN; +bl_af_operator: (WS)* AF_OPERATOR_KW bl_formula (WS)* R_PAREN; +bl_ef_operator: (WS)* EF_OPERATOR_KW bl_formula (WS)* R_PAREN; +bl_au_operator: (WS)* AU_OPERATOR_KW bl_formula bl_formula (WS)* R_PAREN; +bl_eu_operator: (WS)* EU_OPERATOR_KW bl_formula bl_formula (WS)* R_PAREN; + +/**** Formula Definition ******************************************************/ +bl_formula: + predicate + | bl_and_operator + | bl_or_operator + | bl_not_operator + | bl_implies_operator + | bl_ax_operator + | bl_ex_operator + | bl_ag_operator + | bl_eg_operator + | bl_af_operator + | bl_ef_operator + | bl_au_operator + | bl_eu_operator +; |


