2016-10-16 3 views
0

この質問はCapture the entire contiguous matched input with nomとほとんど同じですが、バイト(&[u8])だけでなく、入力(&str)としてUTF-8テキストを解析する必要があります。私はいくつかのパーサーの全試合を取得しようとしています:入力が&strの場合、いくつかの順次ノーパーサーの出力を得るには?

named!(parse <&str, &str>, 
      recognize!(
       chain!(
        is_not_s!(".") ~ 
         tag_s!(".") ~ 
         is_not_s!("./ \r\n\t"), 
        || {} 
       ) 
      ) 
); 

をそしてそれは、このエラーが発生します。

no method named "offset" found for type "&str" in the current scope 

は、入力として&[u8]に切り替えるには、この操作を行うと、その後map_res!を行うための唯一の方法ですか?

答えて

2

&strには、次のバージョンのnomで利用できるOffset形質実装があります。公式2.0の予定リリース日はまだありません。その間、あなたのコードに実装をコピーすることができます:

use nom::Offset; 

impl Offset for str { 
    fn offset(&self, second: &Self) -> usize { 
     let fst = self.as_ptr(); 
     let snd = second.as_ptr(); 

     snd as usize - fst as usize 
    } 
} 
+0

これは孤児のルールとは違うでしょうか? 'Offset'と' str'のどちらも呼び出しコードによって所有されていません。 – Shepmaster

関連する問題