3

我試圖分析一個動態語言,可以有多個翻譯,這取決於概率。我還是有幾個定義的類型在我的語言,比如數,向量等..分析沒有固定/靜態語義的樹?

例如,如果我們看到的表達式「A + B」,那麼這可能是增加了兩個數字的它可以是兩個向量的添加。 一個數字更可能,因此我們認爲'最佳'表示是兩個數字的總和。然而,它們可能是矢量,所以我仍然想保持這種「不太可能」的表示。

如果後來我看到了「A/B」後來我才知道,他們不能是向量,向量爲師是不確定的。所以我會放棄'矢量'表示,正確的表達方式盛行。

我想通過分析AST來做到這一點。問題是,由於類型和操作符的許多可能組合,我們有一個組合爆炸。

在適當的策略或模式,我可以用任何想法?我正在考慮針對不同組合的訪問者類型,它們並行運行以給結構賦予最佳含義。有點像在自然語言處理中分析轉折。

我使用ANTLR的樹行走機構進行了分析,那麼具體到該系統,或者動態語言實現語義的引用,將不勝感激。

+0

如果你能找到的「龍書」(編譯器,原理,技術和工具,阿霍,塞西和烏爾曼)的副本,請閱讀並特別提到在6.7統一算法第6章。 (我的副本是從20世紀80年代開始的,所以章節號碼可能已經改變了,但「統一」這個詞將是關鍵。) – rici

+0

謝謝,但龍書看起來太抽象了,不適合我。我會考慮統一。 –

回答

1

從我的角度來看,你需要的實質上是一個類型推斷系統,這是在編程語言中自動演繹一個表達式的類型。你可以從the wikipedia page about type inference開始,然後花一些時間去了解the Hindley–Milner algorithm

的AST只是一個編譯器的開始,所以你應該試着習慣打造的AST的具體數據結構和寫入遊客多次遍歷樹。語義部分只在你構造完整的AST之後纔開始。

+0

謝謝。我已經有了一個完整的AST,並且已經使用了幾個不同的訪問者來重寫某些部分。我之前已經實現了靜態類型系統,但從未做過任何推理。 –