2019/7/8 LL(2)パーサーの実装に関して詰まっていること
やりたいこと
Rustを用いてLL(2)パーサーの実装がしたい
現状の実装はPeekbaleを用いたもの
これはpeek()を使うことでiteratorを進めずに一つ先の要素を確認することができるが、
今回は2つ先を確認したい
そこで、multipeek()を簡単なコードで動かしてみようと試みた
code:rs
use itertools::Itertools;
use std::iter::Peekable;
fn main() {
let mut it = it.into_iter();
it.multipeek();
}
しかし、型が合わないのでコンパイルエラーになる
じゃあ、IntoIteratorどうやって作るんだ→ドキュメントの「IntoIterator」をクリックする、
code:rs
let mut iter = v.into_iter();
みたいなことしてるので、以下のように書いてみる。動かん。
code:rs
iter.multipeek();
code:rs
// 以下のようにすると動いた
itertools::multipeek(it);
次はこれをどう使っていくか
仮説が多すぎて検証が追いついていない状態mrsekut.icon
具体的には
実装したいことは
次の要素にVat(s)Tokenが来た時に
その次の要素が:=なら変数束縛
実装済み
それ以外なら、変数呼び出し
これができない
と、なるためのparserの実装
知りたいこと
multipeek()を使った簡単なサンプルコード
ドキュメントを読んだときの思考の順序
その他
わかっていないことがわかっていない
一methodに対して一exampleがあると嬉しい
外部のCrateの使い方をあまりかっていない
Traitのこともいまいちわかっていない
そもそも実装しようとしている言語の構文がおかしい説
Peekableのpeekable()に対応するのがMultiPeekのmultipeek()?
reset_peek()を挟まないと、peekし続けるのか