我正在使用preg_match_all來製作一個簡單的解析器。請注意,因爲它只能解析幾句話,所以表現並不重要。是否有可能通過下面的上下文自由語法來解析解析器?如何使用PHP preg_match_all實現簡單的CFG解析器?
S -> NP VP
PP -> P NP
NP -> 'the' N | N PP | 'the' N PP
VP -> V NP | V PP | V NP PP
N -> 'cat'
N -> 'dog'
N -> 'rug'
V -> 'chased'
V -> 'sat'
P -> 'in'
P -> 'on'
這裏我無法解決的問題是循環。
例如,你看到循環哪裏可以有PP - > NP - > PP等等?
PHP中有什麼東西可以像下推式自動機一樣工作,可以解決這個問題嗎?
示例輸入: '貓追狗'
輸出示例:
(S(NP的(N貓))(VP(V追趕)(NP的(N狗))) )
示例輸入: '貓追趕地毯上的狗'
實施例(多個)輸出:
(S (NP的(N貓)) (VP (V追趕)(NP追蹤(NP追蹤)(NP追蹤)(NP追蹤追蹤追蹤)(P追蹤追蹤追蹤追蹤追蹤追蹤追蹤追蹤追蹤追蹤追蹤追蹤追蹤追蹤追蹤追蹤追蹤追蹤)(NP(N dog))(PP(P on)(NP the(N rug)))))
你需要輸出什麼?只是句子在語法中是否有效或是否必須返回某種數據結構纔是真假? – 2011-03-08 01:29:25
我需要數據結構返回.. – user482594 2011-03-08 01:31:14
你能給出一個給定輸入的期望輸出的例子嗎? – 2011-03-08 01:34:52