问题标签 [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.

0 投票
0 回答
115 浏览

parsing - 无法设置优先规则以强制转移 Jison

我正在尝试用我的语言实现一个功能,您可以在通过执行返回函数后执行语句return someVal then someCode()

对于 return 语句,我有以下语法:

在 Jison 文件的标题中,我有以下优先规则:

我知道当存在冲突时,Jison 默认会转移,但我想设置优先规则,这样我就不会在 Jison 中收到转移/减少冲突警告。我认为将最后一条规则设置为优先于所有其他规则会这样做,但我得到了这个:

任何通过优先规则解决此问题的帮助将不胜感激。

先感谢您!

0 投票
1 回答
480 浏览

jison - 从 Jison 中更改词汇状态

是否可以从 Jison 的语法规则中更改词汇状态(又名“开始条件”)?

我正在解析一种计算机语言,当满足某些语法规则时,词汇状态会明显改变(至少对我的人类思维方式而言),即使在词法分析器中没有我可以准确指出的标记。

(我认为这是因为某些关键字在一种状态下是保留/可保留的,而在另一种状态下则不是。)

绝对可以从词法分析器中更改词法状态,例如:

但是当某些语法规则匹配时,有没有办法改变词法状态?

如果我试试这个,我得到

我不确定我所要求的在理论上是不可能的还是在概念上是幼稚的(例如,这是 的真正含义context free grammar吗?),或者它就在那里,我只是没有正确阅读文档。

0 投票
2 回答
171 浏览

bison - groff 的语法是 LALR(1) 吗?

作为一个宠物项目,我正在尝试使用Jison(Bison 的 JavaScript 克隆)制作一个 groff 解析器,但我正在努力弄清楚 groff 的语法是否为 LALR(1)。

有没有人对此有所了解?

提前致谢。

更新 1

为了回应布赖恩的担忧,以下是有关我的问题的更多详细信息:

0 投票
1 回答
582 浏览

javascript - 如何从野牛文件生成带有 JISON 的解析器

我正在尝试用 JavaScript 为 Lilypond 音乐符号语言编写一个解析器。我的第一次手动尝试有效,但只能处理非常小的语言子集。由于 Lilypond 使用 bison 文件来定义其语法 [1] 并且 JISON 声称能够从 bison 文件中工作,我的想法可能是使用这些定义在 JavaScript 中生成解析器。

我在任何地方都找不到这方面的任何示例,并且尝试将这些文件直接提供给 JISON 只会引发错误。

解决这个问题的最佳方法是什么?

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

0 投票
1 回答
291 浏览

javascript - Jison 解析器在第一条规则后停止

我有一个简单的文件格式,我想用 jison 解析器生成器解析它。该文件可以包含任意顺序和数量的多个表达式。这是解析器的 jison 文件:

为简单起见,我将文件缩短为只有字符串和文件 ID 表达式。

我的问题是,如果第二个表达式仅包含一个类似字符串的标记,那么生成的解析器似乎只能识别一个或两个完整的表达式。例如:

文件版本:1.0

将被解析,或

文件版本:1.0“我的字符串”

也会被解析,但是对于

文件版本:1.0“我的字符串”“未解析的字符串”

最后一个字符串不会被解析。

我已经用jison 调试器jison 页面本身尝试了这段代码,但是两个页面都显示了相同的结果。

我对这个问题的建议是:

  1. 一些词法分析器错误(正则表达式)
  2. 一些语法错误(左右递归)
  3. 解析器中缺少某些操作({ $$ = $1;} 的种类)
  4. 我想念的其他一些野牛/吉森魔法

我不是那个 ebnf-parser-guru,所以请让你的答案尽可能简单。

0 投票
1 回答
356 浏览

jison - 在 Jison 中处理 clike 评论

我正在使用 Jison 作为具有角度前端的词法分析器/解析器生成器在 JS 中编写 clike 语言的编译器。我几乎得到了我所期望的结果,但有一件事让我感到困惑 - 如何让 Jison 忽略评论(/* block */// line)?

有什么简单的方法可以实现吗?请记住,注释可能会插入到任何语句/表达式的中间?

0 投票
1 回答
191 浏览

grammar - 减少/减少jison中clike语法中的冲突

我正在使用 Jison 包开发 clike 语言编译器。在我介绍了课程之前,我做得很好,因此Type可以成为LITERAL现在。这是一个简化的语法:

和jison冲突:

我发现了一个非常相似的问题,没有得到回答,有没有人知道如何解决这个问题?

0 投票
1 回答
728 浏览

parsing - 语法冲突:可能有多种动作

我试图用 jison ( http://zaa.ch/jison/docs/ ) 编写简单的解析器,但停留在描述文本中。

此语法编译时带有警告。

但是,如果我尝试解析文本,它就可以正常工作。这不是代码的完整版本,只是带有文本的版本。我想node在特征中附加节点。

0 投票
1 回答
262 浏览

javascript - 递归布尔值和/或数组 jison 解析器

我对 jison 非常陌生,并设法拼凑出一个有用的查询解析器。我现在正在尝试创建一个解析器,它可以将像“a == 1 and b == 1 and c == 1”这样的字符串解析为像这样的对象

而像“a == 1 or b == 1 and c == 1”这样的字符串应该解析成一个像这样的对象

到目前为止,我的语法看起来像这样:

它给了我以下冲突错误:

有人可以就我做错了什么提出建议吗?非常感谢

0 投票
1 回答
329 浏览

javascript - 编写野牛语法以识别 javascript 函数并忽略其他所有内容

我想做的是

  1. 通过我的语法阅读我的 javascript 代码
  2. 在每个函数的主体内写一个特定的行。

为了。例如输入

输出

我能够识别该功能,但无法将所有内容放在一起。我需要一些面包屑来朝着正确的写作语法方向移动,以实现所需的输出。

我的想法是只专注于解析功能并忽略其他所有内容(即将它们转回)本质上是有缺陷的。

到目前为止我所做的是