2017-01-15 4 views
1

私は改行で終わるか、一度消費された入力の終わりに達するnomを使って文字列を解析しようとしています。私は、次のコードはコンパイルするので、上記のコードをコンパイルする必要があることを信じるように導かれていnomを使った行末またはファイルの終りの一致

error[E0282]: unable to infer enough type information about `E` 
    --> src/lib.rs:181:1 
    | 
181 | named!(am_implied <AddressingMode>, 
    |^cannot infer type for `E` 
    | 
    = note: type annotations or generic parameter binding required 

:これは、次のメッセージで失敗し

named!(am_implied <AddressingMode>, 
    do_parse!(
     opt!(space) >> 
     alt!(
      line_ending | 
      eof!() 
     ) >> 
     (AddressingMode::Implied) 
    ) 
); 

を:私はそれをコンパイルする必要があるように思える次のコードを持っています:

named!(am_implied <AddressingMode>, 
    do_parse!(
     opt!(space) >> 
     line_ending >> 
     eof!() >> 
     (AddressingMode::Implied) 
    ) 
); 

は、私は、これはline_endingeof!パーサはalt! P内で使用されていないときに動作理由として混乱していますarser、しかし失敗したとき。 line_endingまたはeof!で一致する正しい解決方法を知りたいです。

答えて

2

これはthis issue in nomのように見えますが、これはWIP PRです。基本的に、いくつかのnomマクロによって提供される型ヒントが十分でないため、推論に失敗します。

推奨される回避策は、タイプ推論を助けるためにサブパーザのいくつかを分割して別々のパーサーに分割することですが、このケースで試してみるとうまくいかない場合があります。

関連する問題