问题标签 [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.
grammar - 寻找对块结构使用缩进的 Jison 语法示例
有没有人有一个简单的例子来说明如何定义一个语法来解析使用 Jison 的块的类似 python 的缩进?
grammar - 这个语法有歧义吗?
我正在尝试使用Jison定义一种语言,使用很少的标点符号进行分隔 - 就像CoffeeScript但没有缩进。这就是我想要实现的目标:
这定义了三个具有一些属性的对象并添加了它们。请注意,第一个定义使用名称列表指定了两个对象,第二个定义表明空格不应该很重要。
尽管名称列表和属性列表之间缺少开始和结束符号,但我觉得语法并不模棱两可。语法规定每个名称列表后跟一个属性列表。如果我编写一个仅指定定义的语法,这一切似乎都可以正常工作,包括以下产品:
现在,我以一种相当正常的方式为语法的表达式部分添加规则,据我所知:
Jison 抱怨说,对于处于某种编号状态的一堆不同的前瞻标记,“可能有多种操作”。减少选项通常如下所示:
我相信语法是明确的,但我怎样才能说服吉森呢?似乎它可能需要向前看两个标记而不是一个,但这是一个盲目的猜测,Jison 文档指出它不(还?)支持 LL( k ) 语法。
javascript - Jison 解析器中的语法错误
我正在尝试使用Jison编写一个解析器来解析该javap
工具的输出。这是我的 .jison 文件的内容:
不幸的是,当我运行“jison javap.jison”时,我收到了这个错误:
我试过用替换"Classfile"
但\w+
它只是给我一个错误\
而\w+
不是。
javascript - 这个语法怎么模棱两可?
我正在 Jison 中编写一个简单的表达式解析器。这是我的语法:
当我尝试运行它时,它给了我以下错误:
但是,它最终仍然会产生正确的输出。例如2 + 3 * 5 / 7 % 11
正确翻译为2 + 3 * 5 / 7 % 11;
.
在我看来,我的语法似乎是明确的,那么为什么 Jison 会抱怨呢?
更新:正如@icktoofay 解释的那样,这是一个运算符关联性问题。通过将运算符解析为非终结符号运算符优先级和关联性信息会丢失。因此,我解决了以下问题:
话虽如此,该语法只允许一个可选的换行符跟随二元运算符。如何重写它以允许任意数量的换行符跟随二元运算符?此外,必须有某种方式我不必为每个运算符编写 2 条规则。
javascript - 你如何匹配 Jison 中的零个或多个令牌?
我正在 Jison 中编写一个简单的表达式解析器,允许任意数量的换行符跟随表达式中的二元运算符。到目前为止,这是我的语法:
如您所见,我正在为每个二元运算符编写两条规则。这在我看来是非常多余的。我宁愿有一个匹配零个或多个NEWLINE
令牌(Kleene star)而不是一个或多个令牌(Kleene plus)的产品。你会如何在 Jison 中做到这一点?
javascript - 在 Jison 中调试
我正在使用 Jison 编写解析器。这是我的语法:
但是,当我运行它时,我收到以下错误消息:
我应该如何处理此调试消息?你会如何用简单的英语解释这条信息?中的期间expression -> expression expression .
是什么意思?.expression
和是什么.NUMBER
?它们expression
分别有什么不同NUMBER
?
parsing - Bison 的这种转变/减少冲突从何而来?
我试图通过在 Jison(一个 javascript 解析器)中定义一种非常简单的语言来掌握解析的窍门。它接受与野牛相同/非常相似的语法。
这是我的语法:
我得到一个班次/减少冲突。Jison 的输出在这里:
jison - 基本计算器中的“IF ELSE”语句
我正在尝试使用“IF ELSE”语句实现我自己的计算器。这是基本的计算器示例:
我不明白如果我添加这样的“IF”语句:
解析器生成良好。那么我如何使用这样的语句 IF(5>2)THEN (5+2) ELSE (5*2)。计算器的功能当然很好用,但“IF”却不行。
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 来定义语法并生成解析器)。关于如何做的任何想法?