タグ

languageとLanguageImplementationに関するuokadaのブックマーク (2)

  • LL(1)言語を作るのは難しい、しかしLL(1)言語は素晴らしい

    言語実装 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)パーサ(言語)のメリット

    LL(1)言語を作るのは難しい、しかしLL(1)言語は素晴らしい
  • a21_txt01 - essen-wiki

    (註)「.exeの大きさ」はWindows向けにgcc(MinGW)でコンパイルした時の大きさです。 しかしここで扱う言語処理系は、Windows専用というわけではなく、他のOSでも問題なく動作するようになっています。 純粋に言語処理系の規模の目安を示すために書いてあります。 基的には小さければ小さいほどシンプルで、教材として理解しやすいと思っています(可読性を下げてまでのコンパクト化をやらないとして)。 行数を書いているのも同じ意図です。行数だけだと、1行の文字数をうんと増やすことで、見かけ上の行数を減らすことができますが、そんなことをしても実行ファイルサイズは減らないので、 この二つを併記すれば、規模感の目安としては十分だと思っています。 「速度のめやす」は、C言語で10億回ループさせた場合と、この言語で10億回ループさせた場合の処理時間の比を書いています。数が大きいほうが遅いです。

  • 1