问题标签 [cup]

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 回答
105 浏览

java - 解析器生成器 CUP 中的错误输出

我在使用 JAVA 解析器生成器 CUP 时遇到了一些问题,我不知道为什么,有人可以帮助我吗?

这是杯子文件:

当解析 "const aaa = ["a", "b", "c"]" 时,输出为:

显式值 b

显式值 c

显式值 c

0 投票
1 回答
1638 浏览

java - 如何使用 Jlex 和 Cup 工具

我正在尝试在 Ubuntu 上学习有关 JFlex 和 Cup 工具的知识,因为我必须将它们用于学校项目。所以我下载并安装了 JFlex 和 Cup。“jflex-1.6.1/examples”中有一些示例,所以我尝试运行其中一个。特别是我尝试按照自述文件中的说明运行“jflex-1.6.1/examples/cup”中的那个:

编译:

跑步:

文件:

历经千辛万苦,终于能够编译,然后顺利完成前三条指令。现在我尝试运行时出现错误:java Main test.txt。特别是我得到这个错误:

我不知道如何解决这个问题。我也尝试了其他示例,但结果相同。我希望你能帮助我。谢谢!

0 投票
1 回答
128 浏览

json - Cup 和 Jflex 中的 JSON 验证语法

我为数组编写了以下杯子文件:

如何为 Jflex 和 Cup 编写 Json 验证的整个语法?

0 投票
0 回答
207 浏览

jflex - 如何解决简单语法中的 Shift/Reduce 冲突

语法如下:

当我尝试使用 jcup 生成解析器时,我收到以下警告

我怎样才能找到导致这种冲突的原因?

0 投票
1 回答
274 浏览

java - cup_v10k AST 无法识别布尔值

我正在为一种简单的教育类 Java 语言编写编译器。我正在使用 cup_v10k.jar 来生成解析器。我正在使用 AST CUP 扩展来生成抽象语法树。

连同其他终端符号,在我的 parser.cup 文件中,我有

我也有一个非终端符号Constant

的产生Constant看起来像这样:

CUP 在 parser_astbuild.cup 文件中生成产品,如下所示:

INT_VALUE生成的类CHAR_VALUE看起来不错,但问题在于BOOL_VALUE类 - CUP 不知何故无法识别这Boolean是一个内置类型,并假设它是一个SyntaxNode. 生成的类如下所示:

这不会编译,因为Boolean它不是SyntaxNode, 并且没有setParent和其他SyntaxNode方法。

我的问题是,我做错了什么,还是 AST CUP 扩展中的错误?

0 投票
1 回答
373 浏览

java - 有没有办法使用 CUP 和 Jflex 显示当前的解析操作?

对于我的编译器类,我们必须使用 JFlex 和 CUP 创建一个词法分析器和一个语法分析器。部分任务还要求我们为给定的输入文件打印出标记和相应的解析操作。此外,reduce 操作需要显示相应的生产编号。

例如,如果我的解析器的语法是

  1. S -> aXc
  2. X -> bX
  3. X -> b
  4. X -> 码
  5. Y -> Yd
  6. Y -> d

然后作为输入给出的 abbbc 字符串将输出

我知道 CUP 有调试选项,但输出需要采用这种特定格式。显示标记很容易,因为我可以在 Flex 规范的规则部分打印出标记,但我不知道如何打印出 CUP 规范中的操作。

0 投票
0 回答
68 浏览

parsing - CUP 中的小班次/减少冲突

我在试图弄清楚如何解决我的 CUP 解析器项目中的冲突时遇到了一个小问题。我理解为什么会发生错误,VariableDeclStar 的第一个终端可以是 ID 以及引发冲突的类型,但是我无法弄清楚如何以将类型和变量保留为单独状态的方式解决冲突。任何帮助或提示将不胜感激。

https://i.gyazo.com/0ac3fbf4ebc2d3968f1c2a78c292bc0d.png

0 投票
1 回答
179 浏览

parsing - 使用 CUP 进行解析和语义分析 - 访问解析器堆栈

我的语法中有一条规则,例如

;

;

为了实现与 D 的生产规则相关的动作,我需要访问解析器堆栈。我怎样才能在 CUP 中做到这一点?

0 投票
1 回答
188 浏览

if-statement - If then else CUP 中的歧义

我正在 CUP 中构建语法,但在定义 IF-THEN-ELSE 语句时遇到了障碍。

我的代码如下所示:

但 CUP 工具抱怨if_statement.

我发现这篇文章描述了如何在不引入endif标记的情况下消除歧义。

所以我尝试调整他们的解决方案:

可悲的是,CUP 抱怨如下:

为什么这不起作用?我如何解决它?

0 投票
1 回答
461 浏览

python - 将块解析为 Python

我正在用 JFlex + CUP 编写一个词法分析器 + 解析器,我希望有关于块的类似 Python 的语法;也就是说,缩进标记了块级别。

我不确定如何解决这个问题,以及是否应该在词汇或语法级别完成。

我目前的方法是在词法级别解决问题 - 换行符被解析为指令分隔符,当处理一个时,我将词法分析器移动到一种特殊状态,该状态检查新行前面有多少字符并记住在哪一列最后一行开始,并相应地引入和打开块或关闭块字符。

但是,我遇到了各种各样的麻烦。例如:

  1. JFlex 无法匹配空字符串,因此我的指令需要在每个换行符后至少有一个空格。
  2. 我不能用这种方法同时关闭两个块。

我的方法正确吗?我应该做不同的事情吗?