问题标签 [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 回答
2902 浏览

abstract-syntax-tree - 在 Java 中从 cup 创建 AST 时需要帮助

我需要在我的代码中创建 AST。我创建了类 Node 和 AST,比如帮助类。

这是我的杯子

在杯子里换什么来获得 AST ?有人可以帮忙吗?

0 投票
1 回答
12084 浏览

parsing - 使用 Java CUP 生成解析树

我正在使用 CUP 和 JFlex 来验证表达式语法。我有基本的功能:我可以判断一个表达式是否有效。

下一步是实现简单的算术运算,例如“加 1”。例如,如果我的表达式是“1 + a”,那么结果应该是“2 + a”。我需要访问解析树才能做到这一点,因为简单地识别一个数字项是行不通的:将 1 添加到 "(1 + a) * b" 的结果应该是 "(1 + a) * b + 1" ,而不是“(2 + a)* b”。

有没有人有一个生成解析树的 CUP 示例?我想我可以从那里拿走它。

作为额外的奖励,有没有办法使用 JFlex 获取表达式中所有标记的列表?似乎是一个典型的用例,但我不知道该怎么做。

编辑:找到关于堆栈溢出的有希望的线索: 从解析器创建抽象树问题

CUP和AST的讨论:

http://pages.cs.wisc.edu/~fischer/cs536.s08/lectures/Lecture16.4up.pdf

具体来说,这一段:

解析器返回的符号与语法的开始符号相关联,并包含整个源程序的 AST

这无济于事。如果 Symbol 类没有任何指向其子级的导航指针,如何遍历给定Symbol实例的树?换句话说,它看起来或行为不像树节点:

0 投票
1 回答
474 浏览

parser-generator - 使用 JFlex 和 CUP 的形式化需求规范语言的编译器构造

我计划为需求规范语言构建编译器。我想出了使用 JFlex 作为词法分析器和 CUP 作为解析器的想法。

谁能让我知道可以将 JFlex 和 CUP 用于正式规范语言吗?所有文档和教程仅与编程语言有关。

任何可用于构建形式语言编译器的教程。

0 投票
0 回答
1112 浏览

parsing - 杯子解析器中的移位/减少冲突

我写了这个语法:

当我尝试在这个程序上运行解析器时:

(标记是:id lp num(即 expr)rp)

我得到:

所以,我尝试删除这个:

现在我得到一个错误:

0 投票
1 回答
168 浏览

parsing - 如何在 CUP 解析器语法中的两个标记之间定义至少一次出现的字符串

我正在尝试在 LALR(1) 语法(使用 CUP 解析器)中定义一个非终结符号。要求

最后我想出了这个定义:

whereSC是标记之间的分隔符(分号),并且hour_l是小时列表的非终端符号。这个解决方案有一个问题:HOUR不能存在,因为 epsilon 可以减少到hour_l. 除了指定所有可能性或使用 CUP 的语义功能(即在部分中放置多少次的计数器)之外,还有一个聪明的解决方案HOUR吗?我宁愿不使用语义来实现这一点;事实上,在我看来它与语法有关。

0 投票
0 回答
821 浏览

java - 在生成的类文件中找不到符号错误

我正在为一种小型编程语言设计一个编译器。我们得到了一个 java 预处理器(GEN 包),它生成编译器所需的 AST。我们必须将特定格式的输入语法提供给 GEN 文件。GEN 文件将自动生成 java 类文件。我的 GEN 文件正在正确编译。但是,无论我在 GEN 代码中进行什么更改,生成的 JAVA 类文件都会出现以下错误。

我搜索了这个错误,发现它与使用了错误的包或未声明的变量有关。但是,在我的情况下,错误是在运行时出现的。我不确定这里出了什么问题。

PcatParser.program_AST 生成 PcatParser.java 类文件。#< > 语法用于为指定输入生成 AST。

0 投票
1 回答
189 浏览

parsing - 杯子解析器中的移位/减少冲突(带有数组和矩阵的语法)

我正在为一种小语言编写一个杯子解析器,该语言应该支持以数组和矩阵作为其字段的类。例如,如果有一个类实例:

这些字段将通过以下方式访问:

由于我不断遇到移位/减少冲突,我无法为最后一部分编写作品。这是我的制作:

警告 : *在状态 #189 中发现 Shift/Reduce 冲突,在 Designator ::= Designator LSQUARE Expr RSQUARE ( ) 和 Designator ::= Designator LSQUARE Expr RSQUARE ( ) LSQUARE Expr RSQUARE 下符号 LSQUARE 已解决,有利于移位。

谁能帮我解决这个问题?

0 投票
1 回答
7884 浏览

parsing - 正确设置 Cup/JLex 解析

我在这里有一个非常基本的词法分析器:

这是我非常基本的解析器:

我正在尝试解析示例文件。我做了一个这样的方法:

但是上面的代码抛出了一个错误:

我认为我没有正确设置词法分析器/解析器。

0 投票
2 回答
1744 浏览

parsing - 前缀符号中的算术表达式语法(Java Cup)

我正在用前缀表示法编写算术表达式的语法。但是,在解析负数或减法时我遇到了问题。语法示例是这样的:

但是,如果我的输入是- 5 4,它会减少5E,然后它会减少- E(负数),然后解析器会在 处给我一个语法错误4。正确的应该是5as E, next 4asE- E Eas E。如何使用关联性解决这个问题?还是我需要重写我的语法?

0 投票
2 回答
112 浏览

parsing - Simplest way to create a simple parse in Java

I know about CUP or javaCC or some other parser generators,

but I want to add the ability to understand a simple language to my project, without the need to configure a complex tool as CUP.

The language is something a little too complicated to be parsed with regular expressions, since I want to use operators: