2013-02-26 96 views
1

假設我有以下虛構語法,並帶有子句的遞歸定義。javascript中的遞歸語法的正則表達式

sentence := clause + 
subject := (qualifier *) subjectiveNoun 
objects := object + 
object := nothing | (qualifier *) objectiveNoun 
clause := subject objects verb 
qualifier := adjective | clause 

假設一切都有一個非遞歸的定義,應該如何寫'語句'的javascript語法?如果有人熟悉XRegExp庫來做到這一點,那將是一個附加優勢。

+2

之前人們開始叫喊* 「正則表達式...無法比擬的嵌套/遞歸...」 *:本XRegExp庫*不*支持遞歸匹配:http://xregexp.com/plugins /#matchRecursive @wasabiwimp,[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/),你在這裏的目標是什麼?如果你能夠與正則表達式匹配,那麼是什麼?如果你打算處理分析樹,那麼正則表達式幾乎沒有用,這隻會告訴你源代碼是否匹配。在這種情況下,請查看[PEG.js](http://pegjs.majda.cz/)或[Jison](http://zaach.github.com/jison/)。 – 2013-02-26 07:02:46

+0

你可以明確地挑出「主觀名詞」和「客觀名詞」和「動詞」嗎? – nhahtdh 2013-02-26 07:25:11

+2

這是什麼樣的語法?我很困惑,因爲你已經有了一個語法,所以寫了一個'語法'的JavaScript語法''。可能你的意思是「寫一個JavaScript解析器」? – 2013-02-26 07:50:48

回答

2

的XRegExp庫確實支持遞歸匹配,但什麼是這裏的目標是什麼?如果你能夠匹配這個正則表達式,那麼是什麼?如果你打算處理分析樹,那麼正則表達式幾乎沒有用,這隻會告訴你源代碼是否匹配。在這種情況下,請查看PEG.jsJison

http://xregexp.com/plugins/#matchRecursive

0

Ometa可以很容易地在JS中爲解析語法編寫解析器,並執行一些處理LR的技巧,這意味着它應該能夠處理您的語法,但PEG語法很少用於自然語言解析。