我是一名实习生,试图用Rascal编写我的第一个语法 编程时遇到了我的导师Riemer van Rozen之前从未见过的错误。目前我还在努力查看问题是我的代码还是Rascal bug,但我觉得我应该在这里报告错误。
用于正常解析的语法,甚至在将代码放回到我添加新内容之前的方式之后,它仍会产生相同的错误。
我的语法文件
module Syntax
lexical Natural = [0-9]+ !>> [0-9] ;
lexical ID = [a-zA-Z][a-z0-9A-Z]* !>> [a-z0-9A-Z];
lexical String = "\"" ![\"]* "\"";
lexical Sym = [a-zA-Z.!@#$%^&*];
lexical Mp = Sym*;
layout WhiteSpace = [\t-\n \r]* ;
start syntax CreatorData
= title: "title " ID title
| author: "author " ID author
| homepage: "homepage " ID homepage;
分析器
module Parser
import Syntax;
import AST;
import ParseTree;
public CreatorData load(str txt) = parse(#CreatorData, txt);
错误
我希望有人能告诉我我的节目在哪里,或者我指出了一个未知的Rascal bug。
答案 0 :(得分:1)
调用失败意味着parse
的调用失败,因为您提供的参数与解析的任何可能重载都不匹配。
对于您的代码,您似乎还有一个名为CreatorData
的ADT。这与CreatorData
语法定义重叠。 There is a pattern documented in the tutor how to work around this challenge
不确定你的情况,但通常你可以跳过ADT表格,只是在混凝土树上工作,但这可能是将来要探索的东西。