我将编写一个可以解析GF(2)中2个代数表达式的乘法的函数,即表达式中的任何变量仅采用2个可能的值0或1,因此a^2 = a,(0 ^ 2 = 0,1 ^ 2 = 1)

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

(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


等等

我并不是说这很简单。我只是说这是我要开始的地方。还要注意,一旦有了适当的语法,您可能希望对其进行子类化,以便生成更合适的产品等。

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

10-12 23:12