2024-10-01から1ヶ月間の記事一覧
自由モノイドプログラミング言語の作成(MonIter C#版 バージョン1.0) Python 版 MonIter バージョン 1 の C# 版です。 構文解析 C# のパーサコンビネータ Sprache (Sprache/README.md at develop · sprache/Sprache · GitHub)を使っています。まだ使い方はあ…
自由モノイドプログラミング言語の作成(Python版 5) プログラムの実行 構文解析からプログラムの実行は以下のようになります。prog.eval() によって実行することができます。 from lark import Lark parser = Lark(grammar, parser="lalr") custom_transform…
自由モノイドプログラミング言語の作成(Python版 4) 構文に対応するクラス 以下のようになります。 from abc import ABC, abstractmethod from functools import reduce from itertools import chain, islice from typing import Callable, Iterable, List, …
自由モノイドプログラミング言語の作成(Python版 3) 自由モノイドのクラス(2) 自由モノイドのクラスでは、内部でリストを使っているのに __next__ ではイテレーターとして使っていませんでした。これはこうしないと常に同じ値を返すようになっていたためです…
自由モノイドプログラミング言語の作成(Python版 2) 自由モノイドのクラス 「自由モノイドのイテレーター」では、自由モノイドを表すクラスを作成して、それを無限の場合に拡張しようとしていました。自由モノイド元は有限個の生成元の積なのでそうしていた…
自由モノイドプログラミング言語の作成(Python版 1) 前回は C# の Sprache を使って書いていたのですが、構文がわかりにくくなってしまったので、いったん Python の lark モジュールを使って書き直してみることにします。このモジュールでは構文を独立して…
自由モノイドプログラミング言語の作成 前回のフィボナッチ数列を生成するプログラムを書くことができる簡単なプログラミング言語を作ります。C# のパーサコンビネータ Sprache (Sprache/README.md at develop · sprache/Sprache · GitHub)を使ってやってみ…
今後の予定 前回の「クロージャーの調査」では「プログラム電卓(Blockly)へのクロージャーの導入」をやろうとしていたのですが、この件はいったん保留します。『Rustで作るプログラミング言語 —— コンパイラ/インタプリタの基礎からプログラミング言語の新…
プログラミング言語の機能との対応(自由モノイドクラス作成) 自由モノイドを表すクラスを作成します。「有限+無限」の続きです。 自由モノイドクラスの定義 以下のクラスを定義します(Zero、Unit はモナドの用語です。これはモナドに対応させたいためで今後…
プログラミング言語の機能との対応 実際のプログラミング言語のイテレーターの機能では変換される先はどうなっているかを調べていきます。プログラミング言語ではどこかで無限の回数実行されるとそれ以後は実行されないので、結局「有限+無限」が定義できれ…