当前位置: 首页 > 知识库问答 >
问题:

如何使用JISON从野牛文件生成解析器

潘胤
2023-03-14

我试图用JavaScript为Lilyond音乐符号语言编写一个解析器。我的第一个手册试图工作,但只能处理该语言的一个非常小的子集。由于Lilyond使用bison文件来定义其语法[1],JISON声称能够从bison文件中工作,我的想法是也许可以使用这些定义来生成JavaScript中的解析器。

我在任何地方都找不到这样的例子,试图将这些文件直接输入JISON只会抛出错误。

最好的方法是什么?

[1] :见https://github.com/lilypond/lilypond/blob/master/lily/lexer.ll和https://github.com/lilypond/lilypond/blob/master/lily/parser.yy),

共有1个答案

益锦程
2023-03-14

解析器相对(!)简单:去掉C代码(你应该先保留AST结构,看看他们是怎么做到的),保持原有的先例(JISON在很大程度上理解Bison语法),然后填充代码来填充AST。相比之下,Lexer非常复杂,我不知道JISON是否支持所有的flex特性,但除此之外:按照上面对解析器部分的描述。

但这仍然会有很多工作,这是肯定的;-)

编辑:在玩弄Lilypond的语法并在网上搜索更多信息后,我无意中发现了以下引用:

LilyPond语法做了很多奇怪的事情…

由Lillypond开发商在年命名为“dakas”https://lwn.net/Articles/561990/

我同意。

 类似资料:
  • 我正试图通过Jison为ChucK语言生成JavaScript解析器,并且已经有了一个良好的开端,只是生成的解析器无法处理语言中的歧义。最初的ChucK编译器是由Bison生成的,它必须能够以某种方式解决这些歧义。 出于这个问题的目的,我已经将这个问题简化为一个仅表示一种歧义的解释语法。作为参考,我列出了所有相关文件(包括生成的解析器)的要点。项目结构如下: 语言/词汇。js:lexer 语法本身

  • 问题内容: 使用,我想知道如何将interface {}的值编组为type的值。 该文档的状态: 使用这种类型的能够解组或 编组 值部分。 但我找不到会返回的Marshal函数。 我想念什么? 我尝试做的例子: 输出: &{种类:2数据:[12 0 0 0 72 101 108 108 108 111 32 119 111 114 108 100 0]} 问题答案: 在封送和拆组时,bson.Ra

  • 问题内容: 我正在尝试解析一个较大的fasta文件,并且遇到内存不足的错误。一些建议,以改善数据处理将不胜感激。当前程序正确打印出名称,但是部分通过文件我得到一个MemoryError 这是发电机 这是呼叫者存根,这部分工作后会添加更多 对于那些不熟悉fasta格式的人,这里是一个示例 每个条目均以“>”开头,说明名称等,然后接下来的N行是数据。除了下一行开头有“>”的行以外,没有定义的数据结尾。

  • null 我现在的代码: 此代码返回。我知道这是因为对于表行,我使用的是,默认情况下它在空格上拆分。由于有些列缺少值,因此对于第二个和htird表,表头中的元素数和表行中的元素数不匹配。我正在努力解决这个问题,因为表示缺失值的空格字符的数量对于每个表来说是不同的。 我的问题是:是否有一种方法可以解释某些列中丢失的值,以便在丢失值为null或NaN的情况下获得一个DataFrame作为输出?

  • 如何从testng-results.xml文件中获取结果摘要。测试用例:通过,失败…如果我能得到一个java代码或工具,这将是很容易的。我的输入是testng-results.xml文件,所需的O/P是所有测试用例的摘要:失败、通过、跳过。提前感谢!!维韦克·佩马瓦特

  • 我正在使用snmp4j开发snmp管理器。我需要读取MIB文本文件并生成相应的XML文件。是否有任何SNMP4j库可用于解析Mib文本文件并获取每个对象的数据。如果snmp4j不能解决我的问题,是否有其他类似的开源可用? 谢谢