2010-09-15 70 views

回答

0
+1

我看到這個生成器,但它是4歲。我在想可能會有更新的東西 – Toad 2010-09-15 18:03:27

+11

讓我們下次看到一些內容,而不僅僅是一堆鏈接。 – 2010-09-15 18:04:36

+1

@ts。我想你現在知道了,但這完全是你的責任,而你獨自一人,作爲一名撰稿人:) – 2016-08-22 15:10:19

6

我幾年前使用LIME Parser generator for PHP,它已經非常成熟和穩定。

解析器生成器本身是用PHP編寫的,在任何技術意義上都沒有關係 - 因爲我們只需要生成的解析器在PHP中,但我仍然喜歡這個細節。這讓我覺得在PHP ;-)

編輯軟件編寫更少歉意:

我要補充:

  1. 我在哪裏寫的「拿來主義」這將是更準確的說,我「玩」。我還沒有用石灰寫過任何生產代碼。但我認爲沒有理由不這樣做。

  2. 隨着lime提供的「計算器例子」使用了一個tokenize()方法,它離lex的實際替代品很遠。但是,如果你需要一個真正的標記器,應該可以在「前端」使用lex來將標記提供給「後端」。

0

我已經將jison,一個野牛克隆在JavaScript中移植到php中。結果是一個殺手解析器,能夠處理非常簡單和非常複雜的搜索/解析。它現在是Jison的一部分,但我的叉子中有一些更新 - https://github.com/robertleeplummerjr/jison。這些文件在這裏 - https://github.com/robertleeplummerjr/jison/tree/master/ports/php

查看該頁面的自述文件,您可以同時創建一個javascript和php解析器,它們可以執行相同或不同的操作。涼!

-5

我建議你編寫自己的解析器,因爲今天它很容易。

在我看來,最簡單的方法是爲每種可能的語法類型(表達式,測試,循環等)創建一個類。

在每個類

然後,代碼以下方法:

  • 一個方法從字符串確定的,如果該字符串是給定類型的(a+b是類型「表達」的,if(b)不)
  • 一個方法來「跑」這個類型(a+b將返回a->run() + b->run(),並a->run()將返回一個值)
相關問題