Переведите логическое выражение в конъюнктивную нормальную форму и в дизъюнктивную нормальную форму.
В логическом выражении допускаются следующие операторы:
/\ (conjunction), \/ (disjunction),
-> (implication), ~ (negation)
СОСТОЯНИЕ: Вы должны использовать PLYБиблиотека Python для этой реализации.
Пример:
Input: (((A/\B)\\/(C/\D))\\/E)
Output: (A\\/C\\/E)/\\(B\\/C\\/E)/\\(A\\/D\\/E)/\\(B\\/D\\/E)
Я пытался использовать библиотеку 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)