簡體   English   中英

解析GF中的代數表達式(2)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM