在抽象语法中使用映射类型

时间:2015-05-11 16:09:44

标签: rascal

我希望将解析树的一部分抽象为地图。具体来说,我想要一些具体的东西:

syntax RecType = RECORD: "{" {(Ident "=" Num) ";"}* "}"

我们分别只说IdentNum以及strint

被抽象为:

public data RECTYPE = RECORD(map[str, int] rec);

这有可能吗?我从这里得到一些构造函数错误。

谢谢!

1 个答案:

答案 0 :(得分:1)

你有两个问题:

  1. 为什么这个定义不起作用?
    语法中的生成名称必须以小写字母开头,这是为了避免编写拒绝规则时出现歧义。 (同样,符号的名称必须以大写字母开头)。
  2. 如何将解析树翻译成AST?
    我们有一个implode函数,您可以使用它将解析树转换为ast。然而,AST必须密切模拟你的语法。如果我是正确的,这不会将您的键值对转换为地图。您必须手动将转换写入所需的AST。 (这并不难,请查看this recipe for an example