КОНВЕРТНОЕ ВЫРАЖЕНИЕ В ФОРМУ CNF с использованием PLY Parser - PullRequest
0 голосов
/ 01 октября 2019

Переведите логическое выражение в конъюнктивную нормальную форму и в дизъюнктивную нормальную форму.

В логическом выражении допускаются следующие операторы:

/\ (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)

1 Ответ

0 голосов
/ 06 октября 2019

Проверьте этот код для некоторой помощи. Он имеет все решения для преобразования логического выражения в cnf. https://github.com/panjinbo/CNF_Converter/blob/master/cnf/cnfconverter.py

...