2012-11-22 77 views

回答

3

在這種情況下,你必須編寫一個解析器。正則表達式不起作用,因爲模式可能會有所不同。當你說'變量=句子'時你已經注意到了。 爲此,您可以使用spoofax或javacup來定義語法。我會給你一個JavaCup片段:

掃描儀問題:假設'變量'遵循以下模式:(_ | [a-zA-Z])(_ | [a-zA-Z])* 和'number'是:([0-9])+ 請注意,數字可以是任何小數或整數,但在此我將其聲明爲該模式,假設我的語言只處理整數(或任何該模式意味着:))。

現在我們可以在JavaCUP語法之後聲明我們的語法。其或多或少是這樣的:

表達:: =變量 「=」 句子

句子:: =句子 「+」 的句子;
句子:: =句子「 - 」句子;
句子:: =句子「*」句子;
句子:: =句子「/」句子;

sentence :: = number;

......並且進一步發展。

如果你從未有過任何編譯器的類,它可能看起來很難看。另外,還有很多語法的限制來避免解析器中的無限循環,具體取決於您使用的是哪一種(RL或LL)。

不管怎樣,你的問題真正的答案是:你不能做你想要的東西只能用正則表達式,我需要更多的概念。

+0

好的。我同意純RE不是個好主意。 ST2的語法定義是plists(xml),因此爲了便於編輯,作者建議在某種json對象中編寫定義,然後將它們轉換爲plist(請參閱問題鏈接)。我的問題是ST文檔沒有足夠的例子來說明如何編寫通用規則。他們只是解釋json的語法。由於許多語言都有很多語法defs,我想這不是不可能的任務..我只是不知道如何寫這個plists或jsons。可能有關於此主題的其他文檔? – akaRem

+0

我的意思是在語法定義RE是定義語法的方式。問題是如何做到這一點。 (而且我只想爲一種罕見的編程語言編寫高級代碼規則,也不需要解析器,編譯器或其他代碼) – akaRem

+0

您是否必須使用此ST2?我認爲json文件中的語法不夠人類可讀。我的意思是,你可以閱讀它,但它非常艱難。 – GPrimola

相關問題