Logic 更改解析语言
我正在使用模态SAT解算器。不幸的是,这个解算器使用的是Flex和Bison,这两种语言我都不精通 我想把一种语法改成另一种语法,但我有一些问题要做,即使在关于FlexLexer和Bison的教程之后 问题是: 我希望能够解析这样的模态逻辑公式: 在前面的符号中,这些公式是这样写的:Logic 更改解析语言,logic,bison,flex-lexer,boolean-logic,modal-logic,Logic,Bison,Flex Lexer,Boolean Logic,Modal Logic,我正在使用模态SAT解算器。不幸的是,这个解算器使用的是Flex和Bison,这两种语言我都不精通 我想把一种语法改成另一种语法,但我有一些问题要做,即使在关于FlexLexer和Bison的教程之后 问题是: 我希望能够解析这样的模态逻辑公式: 在前面的符号中,这些公式是这样写的: (非(IMP(和(所有R0(IMP C0 C1))(所有R0 C0))(所有R0 C1))) 下面是用于解析它们的Flex/Bisons文件: "(" return LP; ")" retur
(非(IMP(和(所有R0(IMP C0 C1))(所有R0 C0))(所有R0 C1)))
下面是用于解析它们的Flex/Bisons文件:
"(" return LP;
")" return RP;
"[]" return ALL;
"<>" return SOME;
"&" return AND;
"IMP" return IMP;
"|" return OR;
"IFF" return IFF;
"~" return NOT;
"true" return TOP;
"false" return BOT;
"r" return RULE;
"p" return CONC;
alc.y
阻碍我正确解析此新语法的主要问题是:
现在被写入IMP(ab)
(与布尔逻辑~B | A
)(A=>B)(~B v A)
现在都已写入所有RO
李>[r0]
现在编写了一些RO
现在被写入IFF(ab)
。(IFF代表当且仅当)(~B|A)和(~A|B)
"(" return LP;
")" return RP;
"[]" return ALL;
"<>" return SOME;
"&" return AND;
"IMP" return IMP;
"|" return OR;
"IFF" return IFF;
"~" return NOT;
"true" return TOP;
"false" return BOT;
"r" return RULE;
"p" return CONC;
(“返回LP;
“)返回RP;
“[]”返回全部;
""还一些,;
“&”返回并返回;
“IMP”返回IMP;
“|”返回或;
“IFF”返回IFF;
“~”不返回;
“真”返回顶部;
“假”返回BOT;
“r”返回规则;
“p”返回浓度;
我假设只有这2个文件会改变,因为它应该仍然能够通过使用other.y和.lex编译源代码来读取前面的语法
但我想请你帮我准确地写下来:/
提前谢谢 Tommi Junttila使用Bison
和Flex
为Boolean
表达式和电路实现了一种语言
学习源文件并不能完全取代学习正确的
Bison
/Flex
教程,但它肯定会给你一个好的开始。对于有同样问题的人(我假设这个问题非常罕见:)
有了好的词汇表,用谷歌搜索问题并找到解决方案就容易多了
第一个符号
(非(IMP(和(所有R0(IMP C0 C1))(所有R0 C0))(所有R0 C1)))
是ALC格式
另一种符号
开始
([r0](~pO|p1)和[r0]p0)|[r0]p1)
结束
是格式
还有一种称为公式翻译工具(“ftt”)的工具,它是与Spartacus()一起开发和捆绑的。它可以在校准仪的所有格式之间进行转换
使用这个工具是一个避免使用Flex/Bison语言的小黑客
一个人只需要将一个问题转化为另一个问题,问题将是等价的,而且转化速度非常快。我已经做了一些bison/flex教程,布尔表达式的解析已经开始工作。它甚至已经对一种特定的模态逻辑语法起作用了,我的目标是:如何解析第二种语法,不幸的是,这与我在教程中找到的语法完全不同…:/我只能试着激励你仔细阅读BC包。它实现了“不寻常的”布尔运算符,将其转换为您的需求应该不会太困难。
begin
(([r0](~pO | p1) & [r0]p0) | [r0]p1)
end
"(" return LP;
")" return RP;
"[]" return ALL;
"<>" return SOME;
"&" return AND;
"IMP" return IMP;
"|" return OR;
"IFF" return IFF;
"~" return NOT;
"true" return TOP;
"false" return BOT;
"r" return RULE;
"p" return CONC;