问题标签 [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.
abstract-syntax-tree - 在 Java 中从 cup 创建 AST 时需要帮助
我需要在我的代码中创建 AST。我创建了类 Node 和 AST,比如帮助类。
这是我的杯子
在杯子里换什么来获得 AST ?有人可以帮忙吗?
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实例的树?换句话说,它看起来或行为不像树节点:
parser-generator - 使用 JFlex 和 CUP 的形式化需求规范语言的编译器构造
我计划为需求规范语言构建编译器。我想出了使用 JFlex 作为词法分析器和 CUP 作为解析器的想法。
谁能让我知道可以将 JFlex 和 CUP 用于正式规范语言吗?所有文档和教程仅与编程语言有关。
任何可用于构建形式语言编译器的教程。
parsing - 杯子解析器中的移位/减少冲突
我写了这个语法:
当我尝试在这个程序上运行解析器时:
(标记是:id lp num(即 expr)rp)
我得到:
所以,我尝试删除这个:
现在我得到一个错误:
parsing - 如何在 CUP 解析器语法中的两个标记之间定义至少一次出现的字符串
我正在尝试在 LALR(1) 语法(使用 CUP 解析器)中定义一个非终结符号。要求
最后我想出了这个定义:
whereSC
是标记之间的分隔符(分号),并且hour_l
是小时列表的非终端符号。这个解决方案有一个问题:HOUR
不能存在,因为 epsilon 可以减少到hour_l
. 除了指定所有可能性或使用 CUP 的语义功能(即在部分中放置多少次的计数器)之外,还有一个聪明的解决方案HOUR
吗?我宁愿不使用语义来实现这一点;事实上,在我看来它与语法有关。
java - 在生成的类文件中找不到符号错误
我正在为一种小型编程语言设计一个编译器。我们得到了一个 java 预处理器(GEN 包),它生成编译器所需的 AST。我们必须将特定格式的输入语法提供给 GEN 文件。GEN 文件将自动生成 java 类文件。我的 GEN 文件正在正确编译。但是,无论我在 GEN 代码中进行什么更改,生成的 JAVA 类文件都会出现以下错误。
我搜索了这个错误,发现它与使用了错误的包或未声明的变量有关。但是,在我的情况下,错误是在运行时出现的。我不确定这里出了什么问题。
PcatParser.program_AST 生成 PcatParser.java 类文件。#< > 语法用于为指定输入生成 AST。
parsing - 杯子解析器中的移位/减少冲突(带有数组和矩阵的语法)
我正在为一种小语言编写一个杯子解析器,该语言应该支持以数组和矩阵作为其字段的类。例如,如果有一个类实例:
这些字段将通过以下方式访问:
由于我不断遇到移位/减少冲突,我无法为最后一部分编写作品。这是我的制作:
警告 : *在状态 #189 中发现 Shift/Reduce 冲突,在 Designator ::= Designator LSQUARE Expr RSQUARE ( ) 和 Designator ::= Designator LSQUARE Expr RSQUARE ( ) LSQUARE Expr RSQUARE 下符号 LSQUARE 已解决,有利于移位。
谁能帮我解决这个问题?
parsing - 正确设置 Cup/JLex 解析
我在这里有一个非常基本的词法分析器:
这是我非常基本的解析器:
我正在尝试解析示例文件。我做了一个这样的方法:
但是上面的代码抛出了一个错误:
我认为我没有正确设置词法分析器/解析器。
parsing - 前缀符号中的算术表达式语法(Java Cup)
我正在用前缀表示法编写算术表达式的语法。但是,在解析负数或减法时我遇到了问题。语法示例是这样的:
但是,如果我的输入是- 5 4
,它会减少5
为E
,然后它会减少- E
(负数),然后解析器会在 处给我一个语法错误4
。正确的应该是5
as E
, next 4
asE
和- E E
as E
。如何使用关联性解决这个问题?还是我需要重写我的语法?
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: