问题标签 [jison]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
parsing - 无法设置优先规则以强制转移 Jison
我正在尝试用我的语言实现一个功能,您可以在通过执行返回函数后执行语句return someVal then someCode()
。
对于 return 语句,我有以下语法:
在 Jison 文件的标题中,我有以下优先规则:
我知道当存在冲突时,Jison 默认会转移,但我想设置优先规则,这样我就不会在 Jison 中收到转移/减少冲突警告。我认为将最后一条规则设置为优先于所有其他规则会这样做,但我得到了这个:
任何通过优先规则解决此问题的帮助将不胜感激。
先感谢您!
jison - 从 Jison 中更改词汇状态
是否可以从 Jison 的语法规则中更改词汇状态(又名“开始条件”)?
我正在解析一种计算机语言,当满足某些语法规则时,词汇状态会明显改变(至少对我的人类思维方式而言),即使在词法分析器中没有我可以准确指出的标记。
(我认为这是因为某些关键字在一种状态下是保留/可保留的,而在另一种状态下则不是。)
绝对可以从词法分析器中更改词法状态,例如:
但是当某些语法规则匹配时,有没有办法改变词法状态?
如果我试试这个,我得到
我不确定我所要求的在理论上是不可能的还是在概念上是幼稚的(例如,这是 的真正含义context free grammar
吗?),或者它就在那里,我只是没有正确阅读文档。
bison - groff 的语法是 LALR(1) 吗?
作为一个宠物项目,我正在尝试使用Jison(Bison 的 JavaScript 克隆)制作一个 groff 解析器,但我正在努力弄清楚 groff 的语法是否为 LALR(1)。
有没有人对此有所了解?
提前致谢。
更新 1
为了回应布赖恩的担忧,以下是有关我的问题的更多详细信息:
Groff 是用 C++ 编写的,不使用 Bison,我自己推导出语法。
我已经在这里上传了我的所有进度
javascript - 如何从野牛文件生成带有 JISON 的解析器
我正在尝试用 JavaScript 为 Lilypond 音乐符号语言编写一个解析器。我的第一次手动尝试有效,但只能处理非常小的语言子集。由于 Lilypond 使用 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),
javascript - Jison 解析器在第一条规则后停止
我有一个简单的文件格式,我想用 jison 解析器生成器解析它。该文件可以包含任意顺序和数量的多个表达式。这是解析器的 jison 文件:
为简单起见,我将文件缩短为只有字符串和文件 ID 表达式。
我的问题是,如果第二个表达式仅包含一个类似字符串的标记,那么生成的解析器似乎只能识别一个或两个完整的表达式。例如:
文件版本:1.0
将被解析,或
文件版本:1.0“我的字符串”
也会被解析,但是对于
文件版本:1.0“我的字符串”“未解析的字符串”
最后一个字符串不会被解析。
我已经用jison 调试器和jison 页面本身尝试了这段代码,但是两个页面都显示了相同的结果。
我对这个问题的建议是:
- 一些词法分析器错误(正则表达式)
- 一些语法错误(左右递归)
- 解析器中缺少某些操作({ $$ = $1;} 的种类)
- 我想念的其他一些野牛/吉森魔法
我不是那个 ebnf-parser-guru,所以请让你的答案尽可能简单。
jison - 在 Jison 中处理 clike 评论
我正在使用 Jison 作为具有角度前端的词法分析器/解析器生成器在 JS 中编写 clike 语言的编译器。我几乎得到了我所期望的结果,但有一件事让我感到困惑 - 如何让 Jison 忽略评论(/* block */
和// line
)?
有什么简单的方法可以实现吗?请记住,注释可能会插入到任何语句/表达式的中间?
grammar - 减少/减少jison中clike语法中的冲突
我正在使用 Jison 包开发 clike 语言编译器。在我介绍了课程之前,我做得很好,因此Type
可以成为LITERAL
现在。这是一个简化的语法:
和jison冲突:
我发现了一个非常相似的问题,没有得到回答,有没有人知道如何解决这个问题?
parsing - 语法冲突:可能有多种动作
我试图用 jison ( http://zaa.ch/jison/docs/ ) 编写简单的解析器,但停留在描述文本中。
此语法编译时带有警告。
但是,如果我尝试解析文本,它就可以正常工作。这不是代码的完整版本,只是带有文本的版本。我想node
在特征中附加节点。
javascript - 递归布尔值和/或数组 jison 解析器
我对 jison 非常陌生,并设法拼凑出一个有用的查询解析器。我现在正在尝试创建一个解析器,它可以将像“a == 1 and b == 1 and c == 1”这样的字符串解析为像这样的对象
而像“a == 1 or b == 1 and c == 1”这样的字符串应该解析成一个像这样的对象
到目前为止,我的语法看起来像这样:
它给了我以下冲突错误:
有人可以就我做错了什么提出建议吗?非常感谢
javascript - 编写野牛语法以识别 javascript 函数并忽略其他所有内容
我想做的是
- 通过我的语法阅读我的 javascript 代码
- 在每个函数的主体内写一个特定的行。
为了。例如输入
输出
我能够识别该功能,但无法将所有内容放在一起。我需要一些面包屑来朝着正确的写作语法方向移动,以实现所需的输出。
我的想法是只专注于解析功能并忽略其他所有内容(即将它们转回)本质上是有缺陷的。
到目前为止我所做的是