scala中的AST解析器数据类型问题

时间:2012-10-05 13:06:19

标签: parsing scala abstract-syntax-tree

这是我的代码: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]

1 个答案:

答案 0 :(得分:0)

您需要向我们展示原始代码,而不是通过让所有内容返回Parser[Any]来修改您的代码。

错误消息告诉您并非所有替代方案都生成Type的实例。例如,检查方法primitivearray_typestring_type是否都返回Parser[Type]。为每个类型添加类型注释,如果在修改后的定义中出现类型错误,请以相同方式进一步缩小范围。