问题标签 [rascal]
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.
rascal - 模式变量的类型
我发现有时我必须为模式变量明确指定类型,否则 Rascal 将无法按预期工作。控制台中的以下会话说明了一切:
为什么会这样?
rascal - 从 RASCAL 调用 java 函数
我可以从 Rascal 调用 Java 函数吗?我想编写 RASCAL 分析器,但想通过调用 java 函数来访问 CFG 节点。这在流氓中是否可能。简而言之,我可以包装现有的 java 应用程序并从 RASCAL 调用它吗
rascal - 语法规范中*和+的含义
我对语法规范的含义*
和+
语法规范感到有些困惑。我期待类似的东西
表示以分号分隔和结束的语句块。但在文档中它说:
用分号分隔的语句块
我确实在一些代码中看到,这样的语法规范允许{ x = 1; x }
解析语句。为什么会这样?
parsing - Rascal MPL 基本实体建模中的基本解析失败
我想运行一个简单的 Rascal MPL 解析示例,并尝试遵循 2011 年 5 月 3 日的 Rascal Language Workbench (18531D.pdf) 中的清单 1。我已经下载了当前的 Rascal MPL 版本 0.5.1,并且请注意,一些模块路径已更改。下面显示了我的 Entity.rsc 的内容:
我在这里假设过去Name
和Ident
现在的情况Id
;Type
现在是什么Symbol
。然后我继续如下:
但是,当我尝试执行关键parse
功能时,我收到下面列出的错误。我哪里错了?(尽管我注意到我可以在 Rascal 提示符下声明一个Symbol
变量的消息。)
set - 为什么流氓集合的元素在打印时没有排序?
为了可用性,当我写下面的代码
我希望 Rascal 控制台打印相同的内容,但在输出窗口中我看到:
这个例子当然过于简单了,因此排序并没有什么坏处。但是,在更复杂的示例中,我希望对输出进行排序,以便我可以更轻松地验证某个元素是否包含在集合中。
打印集的当前排序是否有意义?
rascal - 从流氓地图中删除一对
在流氓导师的这个页面上,我看到地图上定义了一个删除函数。
我有以下代码行:
运行此代码时出现以下错误:“调用的签名:delete(map[loc, list[str]], loc),与任何声明的(重载)签名模式都不匹配:list[&T] delete( list[&T], int); 条件 = 删除(符号) 条件 = 删除(符号)"
这是流氓中的错误还是我做错了什么?提前感谢您的帮助。
c++ - 如何在流氓 MPL 中使用 SDF 的 {avoid}
我正在尝试使用Rascal MPL设计一个岛语法,但遇到了一个问题:
在 SDF 中实现 Island Grammar 时,一种非常常见的方法是使用 {avoid} 属性定义“包罗万象”的水生产。如果其他产品适用,这会阻止解析器使用此产品。这允许指定一个默认行为,该行为可以被其他产品覆盖而不会产生歧义。一个非常简单的例子是:
我尝试用 Rascal MPL 重现这种行为。我的目标是创建一个岛语法,将所有条件预处理器指令收集到一段 C/C++ 代码中,并使用 Water 生成跳过其余输入。
我试图通过使用 ">" 运算符为ConditionalDirective产生更高的优先级来创建 {avoid} 效果,但这显然不起作用。解析树仍然包含歧义。
例如,如果我解析上面的代码,我会得到一个如下所示的解析树:
据我从Rascal Documentation可以看出,在我的情况下,使用“优先级”运算符可能不是要走的路,但我看不到任何其他可能性。不过我认为有一种方法,因为 rascal 的作者明确指出,每个 SDF 语法都可以转换为 rascal 语法。
有没有办法用流氓 MPL 重现 SDF {avoid} 功能?或者是否有可能以某种方式过滤解析森林,重新应用优先级?
rascal - Rascal 单元测试框架是否支持测试夹具?
在 Rascal 中,您可以通过test
在布尔函数上指定修饰符来定义测试函数。:test
并通过在 Rascal 命令行中键入来运行它们。在这里查看详细信息。
是否可以以某种方式指定测试装置(用于测试套件)?例如setup()
和teardown()
功能?
rascal - 导入模块后无法访问模块中的全局变量
我发现在 Rascal 控制台中,在导入包含全局变量定义的模块后,这些全局变量无法访问。只能访问全局函数名称。例如,在下面的代码中,在Foo
控制台中导入后,我可以调用x()
get 1
,但取消引用x
给我一个未绑定变量错误。为什么?
rascal - Rascal 的命令式模型是什么?
Rascal 感觉既实用又必要。它支持任务。但它也声称是纯净的。所以我想像分配这样的功能是模拟的。那么什么是 Rascal 的命令式模型,通过 monads 的 Haskell 方式或通过唯一性的 Clean 方式?