问题标签 [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.
cup - 如何在 CUP 中表示可选标记
我正在使用 java CUP 为一种小型编程语言生成一个 LARL(1) 解析器。是否有一种紧凑的形式来表达规则中的可选非终结符?例如,在以下规则中
我重复四次基本上相同的东西,当它很自然地放上类似的东西时
java - 调试 CUP 语法
我在调试 CUP 语法时遇到了困难。
所以我在 CUP 中有以下语法:
词法分析器将以下标记提供给 CUP 分析器:
(在哪里;
并SEPARATOR
划分{ }
块。
当我运行它时,我得到以下输出:
(带有单个单词的行表示对导致打印标记的词法分析器的调用。带有 CUP 规则的行表示该规则被匹配。第 7 行是带有 while 语句的行。)
似乎块是失败的原因;当我从提供给语法的内容中删除所有块时,一切都会按我的预期进行解析。
但是,我看不出为什么没有正确解析这些块。
关于可能是什么问题或如何进一步测试的任何想法?
编辑:如果您需要我可能已忽略回答的详细信息,完整代码可在此 repo中找到
jflex - jflex / cup - 错误:找不到符号{返回符号(sym.EQEQ);
我正在尝试在以下位置运行示例:http: //jflex.de/manual.html#Example 我已经复制了示例并且只更改了文件/类名。
运行 jflex 似乎工作正常。
作为下一步,我尝试编译输出。无论我做什么,我都会收到这些错误。
我是不是忘记了什么?
http://czt.sourceforge.net/dev/java-cup-runtime/apidocs/java_cup/runtime/Symbol.html
java - 如何匹配 CUP 解析器语法中的空大小写
我正在使用 CUP 生成解析器,并且我希望空文件成为可接受的程序。根据对此处类似问题的回答,我已尝试将空案例添加到我的开始符号中。
包括所需的空箱会给我以下错误:
如何修改语法以使解析器接受空文件?我使用 Jflex 作为我的词法分析器,并使用 ComplexSymbolFactory 作为符号的类型。
编辑:我已经确认上面的语法是包含空的正确方法。但是,ComplexSymbolFactory 在将空对象转换为符号时遇到问题。即使从官方 CUP 网站运行此示例,我也会收到此错误。
java - 将非终端转换为 java_cup.runtime.Symbol 以用于语法中的空大小写
我正在使用 JFlex 和 CUP 编写编译器。我正在尝试解析 .cup 文件中的空状态。为了简化事情,请考虑以下语法:
在这里,Statement.stub() 返回一个存根的 Statement 实例用于测试目的。
我收到此错误:
我对此感到困惑,因为对 newSymbol 的调用提供了参数:
这与我的解析器中对 newSymbol() 的所有其他调用不同。对 newSymbol() 的所有其他调用都采用以下形式:
有效地将 RESULT 转换为 Object 而不是 Symbol。
所以。我在这里做错了什么?为什么空的情况下会产生如此奇怪的解析器?解决方案是什么?
java - 当用户定义变量或函数的类型时,Java CUP(解析器)会产生移位/减少冲突
我的语法需要有用户定义的类型 ID 组合。下面代码的问题在于它会生成以下内容:
我试图在 VariableDecls 和 Stmts 作品中摆脱我的语法中的 E 作品,但没有成功。我也尝试过用type产生ID,然后产生e产生。包cup.example;
parsing - 减少/减少 CUP 中的冲突
我正在使用 Java CUP 为 Java 子集实现解析器。
语法就像
这工作正常,但是当我添加
CUP 不起作用,警告是:
我认为有两个问题:
1.type ::= ID
并且exp ::= ID
,当解析器看到一个 ID 时,它想要减少它,但它不知道要减少哪个,type
或者exp
.
stmt ::= ID LBRACKET exp RBRACKET ASSIGN exp SEMI
用于分配数组中的元素,例如arr[key] = value;
exp :: exp LBRACKET exp RBRACKET
用于从数组中获取元素的表达式,例如arr[key]
所以在这种情况下arr[key]
,当解析器看到 时arr
,它知道它是一个ID,但它不知道它是否应该转移或减少到exp
。
但是,我不知道如何解决这个问题,如果你有的话,请给我一些建议,非常感谢。
java - 用 Cup 做前缀表示法
我创建了这段代码:
这个表达式的解决方案: alfa + beta * gamma +77 是 + + alfa * beta gamma 77 但程序没有显示正确的解决方案,任何人都可以帮助我吗?
java - Java CUP - 令牌值为空
我想打印出解析器中调用的标记的值(由扫描仪返回),但是每个标记都显示为空。
例如当输入文件是
这个语法应该打印“ tmp assignment ”而不是“null assignment”:
有没有其他方法可以获得实际价值(除了书面代码:D),还是我应该做任何进一步的步骤来获得它们?
可能需要的部分代码:
词法分析器
我以 YYINITIAL 状态返回它的方式:
解析器.cup
java - 为什么 Symbol 的字段(左右)总是返回 0?
我正在使用 CUP 和 JFLEX 开发一个帕斯卡编译器。要求之一是从错误中恢复并显示错误在哪里。
我一直在使用 CUP 的syntax_error
方法unrecovered_syntax_error
这是我的 parser.cup 中的解析器代码
这是我的 CFG 的一部分,我只关注我声明错误产生的地方
这是我的 Main.java
我相信 s.right 和 s.left 应该在出现新错误时改变它的值,但是当我有两个错误时:
它应该返回
其中 numberX 和 numberY 可以彼此相等,numberW 和 numberZ 可以彼此相等,但是一对不能等于另一对。
然而,它回报我
如果有人帮助我了解为什么会发生这种情况和/或如何解决它,我将很高兴。