当使用Moo作为tokenizer / lexer时,为什么nearley-unparse不包括从编译的Nearley语法生成的样本字符串中的标记

时间:2018-02-01 17:34:10

标签: javascript parsing context-free-grammar lexer nearley

我不确定Nearley.js libraryMoo tokenizer/lexer或我自己的代码是否存在问题。所以我可能需要将此作为一个问题提交给Nearley回购。所有引用的文件都可以在this Gist中找到。

我正在尝试编写一个Nearley语法,它将解析我的一个班级的作业问题列表。问题出现在problems.txt中,如下所示:

Section 5.2 (Due 4/23)- #3, 5*, 8*, 9, 11, 14*, 15, 17*, 18*, 20, 21*, 22*, 24*, 25 (see example 5, not discussed in class)
Section 5.3 (Due 4/30)- #1, 3*, 4, 5, 6*, 7, 9*, 11, 13*, 16, 20*, 21*, 22*, 23, 24*, 25*, 27, 28*, 31, 32

这只是两行作为例子,整个文件更大。

我写的Nearley语法是problems-grammar.ne here,我还没完成。我在Nearley文档中根据these instructions使用Moo tokenizer / lexer。

我正在使用nearley-unparse命令测试我的语法,使用此命令解释here,其中problems-grammar.js是由Nearley编译的解析器。

nearley-unparse problems-grammar.js -o test.txt

不幸的是,除了新行令牌之外,notarser似乎没有正确生成带有令牌示例的语法。 Herenearley-unparse的一个输出:

Section  (Due )- #*, , 
Section  (Due )- #, *, 
Section  (Due )- #*, , , *, 
Section  (Due )- #*, *
Section  (Due )- #*, *, *, *

我想知道这是我的语法中的缺陷还是与Nearley / Moo本身的缺陷。如果我的代码出现问题,我该如何解决?

1 个答案:

答案 0 :(得分:0)

由于我没有从这里得到答案,我继续asked in the Nearley GitHub repo

根据维护者的说法,nearley-unparse当前无法生成与正则表达式匹配的字符串。也没有任何计划添加该功能,因为它本身就是一个项目。

以下是他们的完整回复:

  

你好!感谢您首先发布StackOverflow问题,   对不起,没有人能够帮助那里: - )

     

这是unparser的限制:它不知道如何生成   随机字符串满足正则表达式,我们也不打算这样做(那   本身就是一个项目!)。

     

你的语法看起来很好,简短一瞥;如果你测试它   nearley-test,希望你会发现你得到了解析树   期望的。