问题标签 [sablecc]
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.
java - 在以编程方式创建的 .jar 文件中加载类
这是我的目标:使用 SableCC 在运行时生成多个解析器/词法分析器,并加载它们的实例以进行解析和词法分析。
所以我想我的步骤是:
.java
使用 SableCC生成文件。我想我已经做到了,很好。.java
将文件编译为.class
文件。我使用JavaCompiler
. 我认为这也很好。将生成的文件放在一个
.jar
文件中,保留文件结构。我用这个作为模板来做这个。.jar
使用JarBrowser检查文件显示包的文件结构被保留。使用它,Jar Catalog 看起来与常规.jar
文件相同。但是,使用 JarBrowser,我的 jar 不会显示在“CLASSPATH 目录”下。这让我相信我的.jar
文件没有正确创建。.jar
将文件加载到URLClassLoader
. 我正在尝试使用它来加载它,Class.forName()
但它似乎不起作用。
每当我执行第 4 步时,我都会得到一个java.lang.ClassNotFoundException
. 有没有人知道为什么会这样?
parsing - 更改语法中的关联模式
我正在尝试使用 SableCC 为模型生成解析器,我称之为 LAM。LAM 本身很简单,其中一个简单的语法(我省略了很多东西)是:
我写了这个语法:
这基本上有效,但有一个副作用:它是左关联的。例如,如果我有
然后解析如下:
我想优先考虑“;” 运算符,因此 L 被解析为
(其他东西,比如“||”,可以保持左结合)
我的问题是:
- 有以“自动”方式进行此类转换的技巧吗?
- 怎么可能是所有优先级都在“;”上的语法??
它也被接受“RTFM链接”:-D 谢谢大家
odata - 用于 OData URI 查询的 EBNF 语法
有谁知道或知道在哪里可以找到用于 OData URI 查询的 EBNF 语法?
我想将它与 SableCC 一起使用来生成用于解析 OData URI 查询的 C++ 类。
java - SableCC 语法文件的问题
我似乎在 SableCC 生成相关词法分析器、节点和解析内容时遇到问题,这些内容通常会从语法文件中自动生成。我目前没有实现抽象语法树。
当我尝试使用以下语法文件运行 SableCC 时,我收到以下错误:
[41,33] AFunctionHead.Id 的重新定义。我知道问题出在哪里,但似乎是制作领域的问题。我可能错过了什么吗?
java - SableCC 期待:EOF
我正在为我的大学做编译器的作业,我是第一次使用 SableCC 3.7。我正在尝试定义我的语法文件,但是当我尝试运行它(通过命令行)时,我收到了这个错误:
“ParserException:[51,5] 期待:EOF
代币
忽略的令牌
有谁知道如何解决这个问题?在线文档不是最好的。
sablecc - SableCC 没有使用解释器方法
我是 SableCC 的新手。刚刚在http://sablecc.sourceforge.net/thesis/thesis.html#PAGE26上运行了计算器示例。我按原样使用语法文件和解释器文件,并尝试解析简单的算术表达式,如“45 * 5 + 2”。问题是,解释器方法 caseAMultFactor 似乎没有被命中。如果我将“+”更改为“-”,我看到它命中 caseAPlusExpr 或 caseAMinusExpr。那么 Start.apply(DepthFirstAdapter) 方法是否只通过顶部模式节点?如何像示例代码似乎那样遍历所有节点?我正在使用 Java 1.7,希望这不是问题。
为了您的方便,我在这里粘贴了语法和解释器代码。谢谢你的帮助。
java - SableCC 解析给出错误结果
我尝试使用 sablecc 解析有效消息。有三种有效的消息格式。
- 啊;(三个连续的字母字符 +semi
{messageid} messageid semi
) - 毫米; (或两个连续的字母或数字字符
{flightnum} carriercode semi
) - -amm(或连字符 + 字母字符 + 2 个连续的字母或数字字符
{load} hypene co semi
)
当我向程序输入有效字符串时,它不起作用。
输入:
美国广播公司;//类型 1
Z Z; //类型 2
Z Z; //类型 2
-ab2; //type3
sablecc 语法代码:
编译成功,运行java代码时抛出解析器异常:
simpleAdders.parser.ParserException:[1,1] 期望:messageid,carriercode,'-'
即使第一个字符串是有效的。
java - 在 Eclipse 中设置 Sablecc
我已按照链接中提到的步骤操作:在 Eclipse 中设置 sablecc 以安装 sablecc。我正在尝试执行链接中提到的第 9 步,但出现错误:无法找到或加载主类。谁能指导我如何在 Eclipse 中设置 sable cc。有没有其他方法可以做到这一点。
sablecc - 了解 SableCC 中的语法
我正在为我的一个项目使用 sableCC,但我对语法文件几乎没有任何疑问。1. Helper 和 Tokens 有什么区别?2. helper 和 Token 应该放什么?3. 最重要的是什么是Productions?
sablecc - 开始使用 SableCC
我是编程的初学者,在学校我必须做一个小的 SableCC 项目。但是我不确定如何正确使用 SableCC。
我已经从 sablecc.org 下载了它,并按照自述文件中的说明进行了安装。
因此,在使用java -jar lib/sablecc.jar
命令安装后,控制台会告诉我使用情况如何,例如
或使用
到我希望 sablecc 工作的地方(我猜)。
但是,当我使用此列表中的任何内容时,它只会说:
Sablecc 未被识别为内部或外部命令
我做错了什么?谢谢!