问题标签 [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 投票
1 回答
2048 浏览

grammar - 寻找对块结构使用缩进的 Jison 语法示例

有没有人有一个简单的例子来说明如何定义一个语法来解析使用 Jison 的块的类似 python 的缩进?

0 投票
1 回答
221 浏览

grammar - 这个语法有歧义吗?

我正在尝试使用Jison定义一种语言,使用很少的标点符号进行分隔 - 就像CoffeeScript但没有缩进。这就是我想要实现的目标:

这定义了三个具有一些属性的对象并添加了它们。请注意,第一个定义使用名称列表指定了两个对象,第二个定义表明空格不应该很重要。

尽管名称列表和属性列表之间缺少开始和结束符号,但我觉得语法并不模棱两可。语法规定每个名称列表后跟一个属性列表。如果我编写一个仅指定定义的语法,这一切似乎都可以正常工作,包括以下产品:

现在,我以一种相当正常的方式为语法的表达式部分添加规则,据我所知:

Jison 抱怨说,对于处于某种编号状态的一堆不同的前瞻标记,“可能有多种操作”。减少选项通常如下所示:

我相信语法是明确的,但我怎样才能说服吉森呢?似乎它可能需要向前看两个标记而不是一个,但这是一个盲目的猜测,Jison 文档指出它不(还?)支持 LL( k ) 语法。

0 投票
1 回答
436 浏览

javascript - Jison 解析器中的语法错误

我正在尝试使用Jison编写一个解析器来解析该javap工具的输出。这是我的 .jison 文件的内容:

不幸的是,当我运行“jison javap.jison”时,我收到了这个错误:

我试过用替换"Classfile"\w+它只是给我一个错误\\w+不是。

0 投票
2 回答
603 浏览

bison - 动态解析器​​ - 从单独的文件中读取令牌

假设我想解析我的新语言,如下所示:

主.mylang

还有另一个文件tags.mylang看起来像这样:

运行main.mylang会输出

我遇到的问题是“猫”、“狗”和“培根”是在一个单独的文件中定义的,正如我的mylang开发人员所实现的那样;即,我不能事先让它们成为语法的一部分。

是否可以在解析时将这些标签动态添加到语法中?我不想添加通配符\w+或其他东西,因为我希望它在无法识别的标签上出错。

编辑:我正在使用jison基于bison.

0 投票
1 回答
761 浏览

javascript - 这个语法怎么模棱两可?

我正在 Jison 中编写一个简单的表达式解析器。这是我的语法:

当我尝试运行它时,它给了我以下错误:

但是,它最终仍然会产生正确的输出。例如2 + 3 * 5 / 7 % 11正确翻译为2 + 3 * 5 / 7 % 11;.

在我看来,我的语法似乎是明确的,那么为什么 Jison 会抱怨呢?

更新:正如@icktoofay 解释的那样,这是一个运算符关联性问题。通过将运算符解析为非终结符号运算符优先级和关联性信息会丢失。因此,我解决了以下问题:

话虽如此,该语法只允许一个可选的换行符跟随二元运算符。如何重写它以允许任意数量的换行符跟随二元运算符?此外,必须有某种方式我不必为每个运算符编写 2 条规则。

0 投票
1 回答
751 浏览

javascript - 你如何匹配 Jison 中的零个或多个令牌?

我正在 Jison 中编写一个简单的表达式解析器,允许任意数量的换行符跟随表达式中的二元运算符。到目前为止,这是我的语法:

如您所见,我正在为每个二元运算符编写两条规则。这在我看来是非常多余的。我宁愿有一个匹配零个或多个NEWLINE令牌(Kleene star)而不是一个或多个令牌(Kleene plus)的产品。你会如何在 Jison 中做到这一点?

0 投票
1 回答
972 浏览

javascript - 在 Jison 中调试

我正在使用 Jison 编写解析器。这是我的语法:

但是,当我运行它时,我收到以下错误消息:

我应该如何处理此调试消息?你会如何用简单的英语解释这条信息?中的期间expression -> expression expression .是什么意思?.expression和是什么.NUMBER?它们expression分别有什么不同NUMBER

0 投票
2 回答
350 浏览

parsing - Bison 的这种转变/减少冲突从何而来?

我试图通过在 Jison(一个 javascript 解析器)中定义一种非常简单的语言来掌握解析的窍门。它接受与野牛相同/非常相似的语法。

这是我的语法:

我得到一个班次/减少冲突。Jison 的输出在这里:

0 投票
2 回答
688 浏览

jison - 基本计算器中的“IF ELSE”语句

我正在尝试使用“IF ELSE”语句实现我自己的计算器。这是基本的计算器示例:

我不明白如果我添加这样的“IF”语句:

解析器生成良好。那么我如何使用这样的语句 IF(5>2)THEN (5+2) ELSE (5*2)。计算器的功能当然很好用,但“IF”却不行。

0 投票
0 回答
97 浏览

javascript - “组合”逻辑表达式并返回子表达式

我需要编写一个算法,将逻辑表达式作为输入,组合其运算符并返回子表达式。

我需要的一些例子:

富 -> [“富”]

富酒吧-> [“富酒吧”]

foo bar OR baz -> ["foo bar", "baz"]

foo bar (baz OR zim) OR zum -> ["foo bar baz", "foo bar zim", "zum"]

foo bar ("baz bets" OR zim) OR zum -> ["foo bar baz bets", "foo bar zim", "zum"]

(foo OR bar) (baz OR zim) -> ["foo baz", "foo zim", "bar baz", "bar zim"]

我已经有一个用于逻辑表达式的词法和句法分析器(使用 JISON 来定义语法并生成解析器)。关于如何做的任何想法?