问题标签 [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 中的编程语言创建语法,但遇到了调用问题。我的语言中的函数使用以下语法调用:
为了执行不仅仅是简单表达式的参数,它们需要用括号括起来,如下所示:
但是,我的语法中有一个错误导致我的解析器解释functionName arg1 arg2 arg3
为functionName(arg1(arg2(arg3)))
而不是functionName(arg1, arg2, arg3)
.
我的 jison 语法文件的相关部分如下所示:
我怎样才能让 Jison 更喜欢 thecallArgs
而不是expr
?
javascript - 使用简单的 jison 语法解析错误
我正在尝试创建一种简单的脚本语言。一开始我只是想要像这样的东西
所以我为 jison 创建了以下语法:
它生成解析器而不抱怨语法。我的问题是当我这样做时
我收到这个错误
这完全让我感到困惑:/ 没有规则首先需要操作员。期望运算符的唯一规则是 AssignStatements,但它们都期望 CHAR_SQUENCE 作为第一个对象。
难道我做错了什么?或者为什么它不起作用?如果您需要任何进一步的信息,请随时询问:)
javascript - jison 规则优先级不起作用?
我现在坐在一个看起来很容易解决但我无法解决的问题前面几个小时:/
我在 jison 中定义了一种类似 javascript 的小型语言。问题是 Parameter 规则和 AssignStatement 规则都(可以)以 CHAR_SEQUENCE 开头,并且它总是选择参数规则。例如,即使代码a = 5;
到达了,throw "reached parameter";
所以它似乎将其解析a
为参数而不是a = 5;
AssignStatement
我语法的相关部分:
我在https://gist.github.com/M4GNV5/36c2550946c1a1f6ec91上发布了完整的语法
那么有没有办法解决这个问题呢?我当然已经尝试过使用 %left、%right、%assoc 和 %precedence 但它没有用(或者我做错了什么?
javascript - 在 Jison 中制作数组
我正在尝试在我的编程语言中添加对数组的支持并且遇到了麻烦
但是,这不会解析“[1,2,3,4]。” Jison 告诉我它需要“]”,但它得到了“,”。有任何想法吗?
parsing - jison 语法定义导致错误的token识别
我最近找到了jison项目,并从其网站上修改了计算器示例。( http://zaach.github.io/jison/demos/calc/ )
使用上述语法定义生成的解析器解析字符串“aaabbbaaba”会导致
不幸的是,我不知道为什么TOKEN1
没有正确找到。删除令牌无效后,我收到解析错误
我发现了一个关联错误的描述,导致了类似的错误消息,关于问题与 Jison 语法,来自生成 dparser 的奇怪错误,但我在我的代码中找不到类似的东西。
这个问题的解决方案是什么?
c - 为 C 程序构建 AST 时的上下文条件
我正在用 Javascript 为 C(子集)编写一个解释器(我想在浏览器中提供程序的执行可视化)。
作为第一步,我想为用户程序创建一个 AST 树。我正在为此使用 Jison,这类似于 flex/bizon 组合。
现在我只是简单地对程序进行标记并解析以检查它是否符合标准给出的语法(让我们先不管 typedef 引入的歧义问题)。
然而,符合 C 语法并不能保证程序有意义,例如
符合语法,尽管 x 未声明, ("jklfds" || "jklgfd") 不是函数指针 - 不检查类型。一般来说,有许多上下文条件没有被检查。
我想知道在构建 AST 树时应该检查多少。例如,理论上在这一点上很容易完全计算和检查常量表达式。但是,许多其他检查都需要上下文。例如,在解析过程中,是否有可能知道某些标识符引用了程序前面声明的结构?
如何按原样构建 AST 树并通过多次分析/转换 AST 来检查上下文约束以证明越来越多的条件是正确的?它会比解析期间的检查更容易/更难吗?
我正在寻找最友好的解决方案,我不在乎它的速度。
parsing - Jison Lexer - 在特定时间检测特定关键字作为标识符
你好!所以,在我的语法中,我想要“res.end();” 不将 end 检测为关键字,而是将其检测为 ident。我一直在思考这个问题,但无法解决。有没有人有任何想法?谢谢!
编辑:这是一种类似 C 的编程语言。
javascript - Jison 递归
我正试图掌握吉森的窍门。不过我有点麻烦。下面的解析器总是返回 [],不管你给它什么。
问题显然出在我对 non-terminal 的定义中program
。声明它的正确方法是什么?
parsing - 根据输入中的长度和位置获取标记
在我的输入中,我有不被任何分隔符分隔的字符流,如下所示:
我想制作解析器(使用 JISON),它根据位置和长度进行标记,这应该是我的标记:
你能给我一些建议我怎么能做到这一点,我试着像这样添加我的令牌:
但正如预期的那样,这不起作用:)
是否有某种方法可以解析这种输入,您可以在其中按字符长度进行解析?
compiler-construction - Jison 全局变量
在以前的 Jison 版本中,有可能具有类似 Flex 的功能,该功能允许定义在词法分析器和解析器上下文中都可访问的变量,例如:
Ref.: 类似 Flex 的功能?
虽然,在最新版本的 Jison 中,这是无效的。chars
,words
并且lines
无法从解析器上下文中访问,从而产生错误。
搜索有关新版本的更多信息,我发现它应该可以通过在解析器的上下文中定义输出来实现%{ ... %}
,但它不起作用,尽管它用于多行语句。我正在从源语言生成代码到目标语言,我将美化这段代码,应用正确的缩进,由范围控制并直接从解析器生成,而不构建 AST。
全局定义目前在 Jison 中是如何工作的?