言語実装 Advent Calendar 2022の6日目です。 本記事ではLL(1)の素晴らしさと難しさについてDesk言語の開発の体験から語ります。 LL(1)とは LL(1)についてご存知でしょうか。 「LL(1)言語」「LL(1)文法」「LL(1)パーサ」でそれぞれ定義がありますが、一番分かりやすい「LL(1)パーサ」をざっくりいうと、ソースコードの頭から順番にトークン(ifや1や{など)を見ていきながらASTを構築するための情報を集める[1]パーサのうち、現在見ているトークンの種類を確認するだけで(それ以上の先読みなしに)ASTのノードの種類(IfやIntegerLiteralやBlock)を決定できるもののことです。 そしてLL(1)パーサでパースできるのがLL(1)文法であり、LL(1)言語であるというのがざっくりした説明です[2]。 次は、LL(1)パーサ(言語)のメリット
parolというLL(k)パーサを生成するcrateがあるのですが、とにかくすごいので紹介します。 parolを知って、Rustでパーサをつくることに関して新しい時代が始まったなと思いました。 パーサコンビネータ Rustでパーサといえばnomやchumskyといったパーサコンビネータが主流の印象です。 これはjsonのように既に文法が定義されている場合やプログラミング言語のプロトタイピングに向いていると思います。 nomのREADMEにも後者について以下のように言及されています。 While programming language parsers are usually written manually for more flexibility and performance, nom can be (and has been successfully) used as a proto
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く