0

ここに私のコードがあります: http://pastie.org/private/t37ectjdnplit66zidj6hq

このコードは、パスカルに似た言語パーサー用です。これらの行に問題があります: 178 、 181 、 193. キーワード [Any] で定義された文法がある場合、正常に実行されます! しかし、そのキーワードを特性と「ケースクラス」の1つに置き換えると、間違いがあることが通知されます! コード : 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]
4

1 に答える 1

0

すべてを return にすることで変更したコードではなく、元のコードを表示する必要がありますParser[Any]

エラー メッセージは、すべての選択肢が のインスタンスを生成するわけではないことを示していますType。たとえば、メソッドprimitivearray_typeおよびstring_typeすべてが を返すことを確認しParser[Type]ます。それぞれに型注釈を追加し、変更した定義で型エラーが発生する場合は、同様にさらに絞り込みます。

于 2012-10-06T13:09:07.613 に答える