解析GF(2)中的代数表达式

标签 parsing algebra

我会写一个函数来解析 GF(2) 中 2 个代数表达式的乘积,即表达式中的任何变量只取 2 个可能的值 0 或 1,所以 a^2 = a ,(0^2 = 0, 1^2 = 1)

例如,如果我们展开 (a+b)*(a+c)在 GF(2) 中,我们应该得到

(a + b)*(a + c) = a^2 + a*b + a*c + b*c = a + a*b + a*c + b*c .

但是,我不确定如何开始使用字符串解析 2 个代数表达式。任何建议/帮助表示赞赏。谢谢!

最佳答案

我建议您看一下 Alex Warth 的 OMeta 和/或 Lucas Rengli 的 PetitParser。两者都是编写解析器的优秀框架。第一个用于 JS,第二个用于 Smalltalk。

这里是一些初始代码行,展示了如何在 PetitParser 中编写解析器。每个片段都是您自己的 PPCompositeParser 子类的方法。

constant
    ˆ$0 asParser / $1 asParser

variable
    ^#letter asParser

timesOp
    ^#blank asParser star , $* asParser, #blank asParser star

sumOp
    ^#blank asParser star, $* asParser, #blank asParser star

element
    ^self constant / self variable

term
   ^self element , (self timesOp , self element) star

等等

我并不是说这是微不足道的。我只是说这是我要开始的地方。另请注意,一旦您有了语法,您可能希望将其子类化,以便生成更合适的作品等。

关于解析GF(2)中的代数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34628185/

相关文章:

javascript - 为什么 jquery 的 parseXML 函数在 XML 看起来正常时失败了?

java - 如何使用 Selenium 从表格中提取 HTML 链接?

javascript - JS中的费马小定理

sql - 关系代数

c++ - 将分贝范围转换为字节范围

java - 使用 JavaParser 更改方法级别的字符串变量

ruby - 如何使用 Nokogiri::XML::Reader 解析大型 XML 文件?

php - 我如何查看星际争霸 2 重播?

ios - 从两个 CGPoint 导出一条线

c++ - OpenGL:为什么我的相机上下颠倒?