将布尔表达式转换为合取范式和析取范式。在
布尔表达式中允许使用以下运算符:
/\ (conjunction), \/ (disjunction),
-> (implication), ~ (negation)
条件:这个实现必须使用PLY Python库。在
示例:
^{pr2}$我尝试使用PLY python库来实现这一点。但是,我不知道如何才能实现这个问题陈述。在
我附加了我的代码,但这只能验证公式,其他什么都不能。在
有谁能帮我实现这一点吗?在
我尝试使用PLY python库来实现这一点。但是,我不知道如何才能实现这个问题陈述。在
我附加了我的代码,但这只能验证公式,其他什么都不能。在
有谁能帮我实现这一点吗?在
tokens = ( 'Var', 'CONJ', 'DISJ', 'IMPL', 'NEG',
'LPAREN', 'RPAREN', )
t_Var = r'[a-zA-Z_][a-zA-Z0-9_]*' t_CONJ = r'/\\' t_DISJ = r'\\/'
t_IMPL = r'\->' t_NEG = r'\~' t_LPAREN = r'\(' t_RPAREN = r'\)'
def t_newline(t):
r'\n+'
t.lexer.lineno += len(t.value)
t_ignore = ' \t'
def t_error(t):
print("Illegal character: ",t.value[0])
t.lexer.skip(1)
def p_Fm(p):
"""
Fm : LPAREN Fm IMP Fm RPAREN
| LPAREN Fm CONJ Fm RPAREN
| LPAREN Fm DISJ Fm RPAREN
| LPAREN NEG Fm RPAREN
"""
def p_Var(p):
"""
Fm : Var
"""
p[0] = p[1]
def p_error(p):
print("Syntax error in input!",p)
import ply.lex as lex import ply.yacc as yacc
lexer = lex.lex()
data = "((A->B)/\\(C/\\D))"
lexer.input(data)
while True:
tok = lexer.token()
if not tok: break
print(tok)
parser = yacc.yacc()
parser.parse(data)
print(data)
请检查此代码以获取帮助。 它具有将布尔表达式转换为cnf的所有解决方案。 https://github.com/panjinbo/CNF_Converter/blob/master/cnf/cnfconverter.py
相关问题 更多 >
编程相关推荐