Difference between revisions of "MELD features/Appendix C/0"
From Public Domain Knowledge Bank
DavidWhitten (talk | contribs) (Created page with "<noinclude> MELD features </noinclude> = Appendix C: BNF Grammar for MELD = This BNF can be used to check for syntactic well-formedness of a MELD formula, and -- coupled...") |
(No difference)
|
Latest revision as of 18:27, 30 September 2019
MELD features
Appendix C: BNF Grammar for MELD
This BNF can be used to check for syntactic well-formedness of a MELD formula, and -- coupled with the 650 formulas above in Appendix A, -- to check a MELD formula for semantic well-formedness as well.
Assume the following Terminals (token-level non-terminals)
<Character>
<String>
<Number>
<Symbol>
<Variable>
Assume the following MELD data object:
<Constant>
The empty expansion is:
<epsilon>
;;;;;;;;;;;;;;;;;;;;;;;;
;; Syntactic Constraints
;;;;;;;;;;;;;;;;;;;;;;;;
<Formula> ::= #$True
| #$False
| <Variable>
| <Literal>
| <NotForm>
| <AndForm>
| <OrForm>
| <XorForm>
| <ImpForm>
| <EquivForm>
| <UnivForm>
| <ExistForm>
| <ExistExactForm>
| <ExistUBoundForm>
| <ExistLBoundForm>
<Formula-Seq> ::= <Formula> <Formula-Seq>
| . <Variable>
| <epsilon>
<NotForm> ::= ( #$not <Formula> )
<AndForm> ::= ( #$and <Formula-Seq> )
<OrForm> ::= ( #$or <Formula-Seq> )
<XorForm> ::= ( #$xor <Formula> <Formula> )
<ImpForm> ::= ( #$implies <Formula> <Formula> )
<EquivForm> ::= ( #$equivalent <Formula> <Formula> )
<UnivForm> ::= ( #$forAll <Variable> <Formula> )
<ExistForm> ::= ( #$thereExists <Variable> <Formula> )
<ExistExactForm> ::= ( #$thereExistExactly <1stOrderTerm> <Variable> <Formula> )
<ExistUBoundForm> ::= ( #$thereExistAtMost <1stOrderTerm> <Variable> <Formula> )
<ExistLBoundForm> ::= ( #$thereExistAtLeast <1stOrderTerm> <Variable> <Formula> )
<Literal> ::= <AtomicFormula>
| ( #$not <AtomicFormula> )
<AtomicFormula> ::= ( <Predicate> <Argument-Seq> )
<Argument-Seq> ::= <2ndOrderTerm> <Argument-Seq>
| . <Variable>
| <epsilon>
<Predicate> ::= <Rep1stOrderTerm>
<FunctionExp> ::= ( <Function> <Argument-Seq> )
<Function> ::= <Rep1stOrderTerm>
<2ndOrderTerm> ::= <1stOrderTerm>
| <Formula>
<1stOrderTerm> ::= <Rep1stOrderTerm>
| <PrimitiveTerm>
<Rep1stOrderTerm> ::= <Constant>
| <FunctionExp>
| <Variable>
<PrimitiveTerm> ::= <Character>
| <String>
| <Number>
| <Symbol>
| <Variable>
;;;;;;;;;;;;;;;;;;;;;;;
;; Semantic Constraints
;;;;;;;;;;;;;;;;;;;;;;;
For <ExistExactForm> :
1st arg must denote a positive integer
For <ExistUBoundForm> :
1st arg must denote a positive integer
For <ExistLBoundForm> :
1st arg must denote a positive integer
For <Function> :
when <Function> is ground
(#$isa <Function> #$NonPredicateFunction) must be true
For <Predicate> :
when <Predicate> is ground
(#$isa <Predicate> #$Predicate) must be true
Relation Arity Constraints:
For <FunctionExp> :
when <Function> is ground
either
(#$isa <Function> #$VariableArityRelation)
or
(#$arity <Function> <N>)
and
<N> is a non-negative integer
and
if <Argument-Seq> is terminated by . <Variable>
the number of <2ndOrderTerm>s in <Argument-Seq>
must be less than or equal to <N>
else the number of <2ndOrderTerm>s in <Argument-Seq>
must be equal to <N>
For <AtomicFormula> :
when <Predicate> is ground
either
(#$isa <Predicate> #$VariableArityRelation)
or
(#$arity <Predicate> <N>)
and
<N> is a non-negative integer
and
if <Argument-Seq> is terminated by . <Variable>
the number of <2ndOrderTerm>s in <Argument-Seq>
must be less than or equal to <N>
else the number of <2ndOrderTerm>s in <Argument-Seq>
must be equal to <N>
Relation Argument Constraints:
For <FunctionExp> :
each term in <Argument-Seq> must satisfy all applicable arg constraints
(e.g., #$arg1Isa, #$interArgIsa2-1, ...)
or <AtomicFormula> :
each term in <Argument-Seq> must satisfy all applicable arg constraints
(e.g., #$arg1Isa, #$interArgIsa2-1, ...)