1

假设我有以下虚构的语法,并带有一个递归定义的子句。

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

假设其他所有内容都具有非递归定义,那么应该如何为“子句”编写 JavaScript 语法?如果有人熟悉 XRegExp 库来执行此操作,那将是一个加分项。

4

2 回答 2

2

XRegExp 库确实支持递归匹配1,但您的目标是什么?如果您能够将其与正则表达式匹配,那又如何呢?如果您打算处理解析树,那么正则表达式几乎没有用,它只会告诉您源匹配与否。在这种情况下,请查看PEG.jsJison

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

于 2013-02-28T15:09:17.740 回答
0

Ometa使得在 JS 中为分析语法编写解析器变得很容易,并做了一些技巧来处理 LR,这意味着它应该能够处理你的语法,但是 PEG 语法很少用于自然语言解析。

于 2013-02-26T07:57:49.113 回答