问题标签 [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.
javascript - 如何从 JISON 解析器中获取抽象语法树(AST)?
所以我通过JISON生成了一个解析器:
我的问题是,我现在如何检索 AST?我可以看到我可以针对输入运行解析器,但如果它有效,它只会返回 true,否则会失败。
作为记录,我正在使用 JISON:http: //zaach.github.com/jison/docs/
javascript - 野牛优先级(实际上使用 jison 但应该相同)
我正在使用 jison (相当于 Bison 的 javascript )并且我遇到了以下优先级问题。我将使用计算器演示 http://zaach.github.com/jison/try/来说明它
它按原样工作正常。优先级是
语法是
如果我将“*”行更改为
并将优先级更改为
它不再起作用了。不应该是一样的吗?这可能很有用,例如,如果希望最终获得一种代数语法,其中 2 x + 3 被解析为 (2x)+3。
谢谢!
bison - 隐式优先级
我正在阅读《Flex and Bison》一书以了解解析器生成器的工作原理,并且有示例:
并且在书中说,上面的语法通过使用单独的非终结符号具有隐含的优先级。但它是如何工作的?假设我们有以下示例:(1 + 3 * 2
空格只是跳过)我们读取第一个令牌1
,它将被推送到堆栈,NUMBER
或者它会通过语法“冒泡”多长时间term
?factor
从哪个语法规则检查下一个标记?为什么这种语法乘法的优先级高于加法?
javascript - 如何使用 Node.js 运行 Jison 测试?
尝试运行 Jison 单元测试,但命令失败。我该如何解决?
programming-languages - 如何从 AST 节点获取行号(Jison)
我正在使用 Jison 构建一个简单的计算器语言,其中包含变量。我希望这些变量的工作方式类似于 JavaScript,即您必须var
第一次使用关键字对其进行初始化。用我的语言,如果变量重新初始化,我想显示一个错误。
我的问题是,如何获取 AST 节点的行号?在我的语法文件中,我可以将解析器中的行号传递给我的AssignVariable
对象,但我想知道是否有更好的方法来做到这一点?
我还需要编译器中其他节点的行号,以进行其他类型的错误检查。
这个问题的一个更高级的结论可能是:使用 Jison(或类似的)检测和处理编译时错误的最佳方法是什么?
javascript - 如何避免语法冲突
我有一个语法文件 — https://github.com/itrelease/fubar-script/blob/jsast/src/grammar.js但我遇到了冲突,我真的不知道如何解决这个问题。如果有人可以向我解释这将是有帮助的。
此规则会产生冲突:
bison - 来自 Expression Interpreter 演示的 Expression AST Parser
我正在尝试将这个“计算器”Jison 示例修改为表达式解析器而不是表达式解释器。我想输出一个描述表达式的 JSON 对象,而不是立即评估它。
- 我试图修改演示以返回带有运算符和操作数作为元素的 javascript 数组。
- 当我解析时
1 + 2
,我希望得到一个字符串化为的 JSON 数组['+', 1, 2]
。相反,我得到1
. - 这似乎与 NUMBER 动作直接相关——无论我告诉什么返回就是我得到的全部。
- 但是,如果我尝试解析“1 2 + 3”,它确实会出现语法错误。
(我不关心我是否在一个有用的AST模型中表示表达式,我只是想学习Jison)
bison - 转义字符语法
我想为允许转义标记分隔符的标记语言创建 Jison (Bison) 语法。
这些将是有效的:
这些示例可能会被解释为以下内容(以 JSON 表示):
转义[]\,
是最少的,但允许任何可打印字符转义可能是有意义的,即使转义是不必要的。
如果不支持转义不可打印的字符,那就太好了。也就是说,\
一行末尾的 a 是非法的。正则表达式可能会免费提供,.
因为它可能不包含换行符,但它也应该发生在其他不可打印的字符上。
很难用谷歌搜索,因为它与 Bison 定义等中转义文字字符的大量结果混在一起。
在 Bison 定义的语言中支持转义字符的最优雅方法是什么?
编辑
这是我到目前为止所拥有的,可以在 Jison 上进行测试,但它不起作用(1
如果有的话,只是返回)而且我不希望文本会原封不动地到达 - 这需要第二遍。这是可以避免的吗?
bison - 语法规范解决 Shift/Reduce 冲突
我正在使用 Jison (Bison) 创建一个简单的标记语言。我显然对此很陌生,但细微的变化效果很好。我只是不明白 S/R 冲突的根源。
两个词法分析器操作(具有不同的开始条件)返回“文本”似乎并不重要,我喜欢这个,因为它似乎允许语法有更少的规则,而且给用户的错误消息是一致的。无论上下文如何,我都尝试使“文本”规则通用,并且我还尝试为每个标记赋予不同的名称,但是当它们一起出现时,它似乎对 S/R 冲突没有任何影响。
解析器应该创建一个带有纯文本、子数组和各种特殊节点的 json 对象。
规格:
警告:
不同的生成器算法或多或少都有问题,但它们似乎都有问题。
谢谢!
javascript - 向 JISON 添加声明
我这里有一个 JISON 计算器示例的稍微修改过的版本:
!
请注意操作员定义的细微差别。我试图从外部定义fact
函数而不是内联。
截至目前,它在运行时告诉我fact is not defined
。我怎样才能解决这个问题?另外,为什么计算器示例在阶乘定义周围使用两个大括号{{ /*like so*/ }}
?