这是我的代码:http://pastie.org/private/t37ectjdnplit66zidj6hq
此代码适用于类似pascal的语言解析器。我在这些方面遇到问题:178,181,193。当我使用关键字:[Any]定义语法时,我成功运行它!但当我用特征和“案例类”之一替换该关键字时,它通知我有错误!我想我不明白使用代码时的含义:parser [???]。有人可以帮我解决这些问题吗?
line 181: def val_type : Parser[Type] = primitive| array_type | string_type
line 193: def ident_list : Parser[List[Id]] = ident ~(rep(","~> ident))
更新: 以下是相应的错误:
line 181: type mismatch; found : MPRecognizer.this.Parser[Any] required: MPRecognizer.this.Parser[Type]
line 193: type mismatch; found : MPRecognizer.this.Parser[MPRecognizer.this.~[String,List[String]]] required: MPRecognizer.this.Parser[Id]
答案 0 :(得分:0)
您需要向我们展示原始代码,而不是通过让所有内容返回Parser[Any]
来修改您的代码。
错误消息告诉您并非所有替代方案都生成Type
的实例。例如,检查方法primitive
,array_type
和string_type
是否都返回Parser[Type]
。为每个类型添加类型注释,如果在修改后的定义中出现类型错误,请以相同方式进一步缩小范围。