我的目标是编写一个将采用逻辑表达式的函数(例如:A OR NOT(B和C))并将其转换为析取范式.(不是B或不是C)
我写了一个会生成逻辑表达式的语法
S => !S
S => (S)
S => S op S
S => W
op => AND | OR
W => A | B | C | ... | Z
Run Code Online (Sandbox Code Playgroud)
这是我的算法
使用解析树,我可以通过检查当前节点的父节点,并将其向下推入树或重新排列树(在NOT NOT的情况下)来简化NOT运算符.然后平坦树是微不足道的.
这适用于纸上,但现在我坚持使用实际的解析器.如何将这些规则转换为解析器类?我不想使用外部库,并希望从头开始编写解析器.