第1关:创建语义对象
任务描述
本关任务:完成命题逻辑合式公式语法元素对应语义对象的建模。
本实训按照如下的语法定义命题逻辑合式公式:
FOL BNF
FORMULA ::= PROPOSITION
| ‘(’ FORMULA CONNECTIVE FORMULA ‘)’
| ‘not’ FORMULA
| ‘(’ FORMULA ‘)’
| ‘T’
| ‘F’
CONNECTIVE ::= ‘implies’ | ‘equiv’ | ‘and’ | ‘or’
PROPOSITION ::= [A-Z]-[T, F]\w
根据此处定义的语法,非、合取、析取、蕴含、等值分别用not、and、or、implies和equiv表示。命题常量为大写英文字母T与F,命题词为除T与F之外的24个大写英文字母。
为生成给定命题逻辑公式的真值表,需在基于上述语法的抽象语法树上应用命题逻辑联结词的语义规则,因此,首先需为上述语法元素建立对应的Python类。
共有7个语法元素需建立Python类:命题常量、命题词、非、合取、析取、蕴含、等值。每个类的属性及方法描述如下:
Proposition类:对应命题词,有两个属性name和value,初始时name为命题词的名字,value为None。
BoolConstant类:对应命题常量,有两个属性name和value,初始时name为命题常量对应的字母,为T或F,value为根据命题常量的name分别为True或False。
Not类:对应not逻辑联结词,只有一个属性,为formula,对应为非联结词后的命题逻辑