[英]parsing algebraic expressions in GF(2)
我會編寫一個函數來解析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
子類的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)或其他)編寫解析器非常簡單。 請參閱我的答案,了解如何輕松編寫此類解析器: 是否有可用於8位嵌入式系統的flex / bison的替代方案?
GF(2)位是關於這樣的公式意味着什么的語義解釋。 解析完全沒關系,這完全是關於語法的。 意義發揮作用的地方是你想要解釋公式。 在某些時候,您可能希望使用變量的值來計算表達式。 為此,您必須將公式捕獲為數據結構(通常稱為(抽象)語法樹),然后遍歷該樹以計算所需的結果。 該鏈接還討論了如何做到這一點。
如果你想象征性地操縱公式,那么你就是一個完全不同的球類游戲。 解析仍然很容易,但公式操作不是,你會想要使用那些旨在進行這種符號操作的工具; 它們通常定義自己的解析機制(並使其易於使用),以確保可以操縱捕獲的解析。 當然,您必須定義符號操作的規則是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.