自由モノイドのイテレーター
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(23)) C# 構文木の調査 「自由モノイドのイテレーター(16) - エレファント・ビジュアライザー調査記録」に書いた構文木を調べる方法についてまとめます。 C# 構文木の調査用のクラス /// <summary> /</summary>…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(22)) C# 形式のコードから構文オブジェクトに変換して実行 「Roslyn」の「Syntax API」で C# の構文解析を行います。「 自由モノイドのイテレーター(14) - エレファント・ビジュアライザー…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(21)) MonIter コードから C# コードに変換して実行 「Roslyn for Scripting」で C# のコードを実行します。「自由モノイドのイテレーター(13) - エレファント・ビジュアライザー調査記録」…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(20)) MonIter コードから C# コードに変換 引数で渡すバージョン MonIter のコード def fib(x, y) = x & fib(y, x + y); fib(0, 1)を C# のコードに変換するには以下のようにします。 /// <summary></summary>…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(19)) MonIter コードから Python コードに変換 Python コードについては「自由モノイドのイテレーター(9) - エレファント・ビジュアライザー調査記録」を参照してください。 引数で渡すバ…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(18)) MonIter コードの実行 引数で渡すバージョン MonIter のコード(スペース、改行などは無視されます) def fib(x, y) = x & fib(y, x + y); fib(0, 1)を実行するには以下のようにします…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(17)) 変数とその値の対応を記憶するためのクラス 変数とその値の対応を記憶する線形リストを保持するクラス(Env<T>) Env<T> は線形リスト(LinearList<EnvItem<T>>)を保持します。Env<T> は IEnumerable<EnvItem<T>> を実装</envitem<t></t></envitem<t></t></t>…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(16)) 前回までの説明では、線形リストのクラスは独立していなかったのですが、クラスの構成を変えて独立させました。 線形リストのクラス 変数とその値の対応を記憶するために(一方向の)線…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(15)) 有限または無限の自由モノイドのクラス(FreeMonoid<T>) FreeMonoid<T> は IEnumerable<T> を実装するクラスとします。IEnumerable<T> を実装すると foreach で使うことができます。IEnumerable<T> を</t></t></t></t></t>…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(14)) 構文解析のクラス C# のパーサコンビネータ Sprache (Sprache/README.md at develop · sprache/Sprache · GitHub)を使っています。Visual Studio のソリューションエクスプローラーで…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(13)) 構文要素に対応するクラス(Number クラス:数値を表す) /// <summary> /// 数値を表すクラス /// </summary> internal class Number : DomainExpression { /// <summary> /// 数値を表す整数 /// </summary> private readonl…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(12)) 構文要素に対応するクラス(Identifier クラス:名前(関数名)を表す) /// <summary> /// 名前(関数名)を表すクラス /// </summary> internal class Identifier : DomainExpression { /// <summary> /// 名前の文字</summary>…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(11)) 構文要素に対応するクラス(ParameterName クラス:パラメーター名を表す) /// <summary> /// パラメーター名を表すクラス /// </summary> internal class ParameterName : CodeGeneratable { /// <summary> /// 名</summary>…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(10)) 構文要素に対応するクラス(DomainOperation クラス:数値の単項演算・二項演算を表す) /// <summary> /// 数値の単項演算・二項演算を表すクラス:演算子といくつかの演算数で構成されます。 /</summary>…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(9)) 構文要素に対応するクラス(DomainUnit クラス:数値を表す無限自由モノイドの項) /// <summary> /// 数値を表す無限自由モノイドの項:数値の式で構成されます。 /// </summary> internal class DomainUni…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(8)) 構文要素に対応するクラス(DomainFunction クラス:関数(引数は数値)の呼び出し) /// <summary> /// 関数(引数は数値)の呼び出しを表すクラス:関数名・関数の引数(数値)のリストで構成されます</summary>…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(7)) 構文要素に対応するクラス(Function クラス:関数(引数は数値の列)の呼び出し) 定義済みの関数 zipsum、tail はこのクラスの Eval メソッドで処理します。 /// <summary> /// 関数(引数は数値の</summary>…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(6)) 構文要素に対応するクラス(Expression クラス:式(無限自由モノイド)) /// <summary> /// 式(無限自由モノイド)を表すクラス:数値を表す項の無限個のリストで構成されます。 /// </summary> internal cla…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(5)) 構文要素に対応するクラス(Definition クラス:関数定義) /// <summary> /// 関数定義を表すクラス:関数名・パラメーターリスト・関数本体の式で構成されます。 /// </summary> internal class Definitio…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(4)) 今後は構文の説明を自動的に作成できるようにしていくとして、今はコメントに説明を書いていきます。 構文要素に対応するクラス(ExpressionStatement クラス:式のステートメント) /// <summary></summary>…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(3)) 構文要素に対応するクラス(Prog クラス:プログラム全体) Prog クラスに構文要素を作成する関数をまとめました。説明はコメントを見てください。構文を説明する資料を自動的に作れるよ…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(2)) 構文要素に対応するインターフェース Statement 式のステートメントまたは関数の定義を表します。メンバーは以下のものがあります。 Eval(env, prog): 構文木を評価して無限版自由モノ…
自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(1)) C# 形式のコードを変換する機能は作成できました。ここで、この言語を改造してモノイド的論理プログラミング言語(MonoLog)、モノイド的クロージャー調査用言語(MonoClosure)を作る計画…
自由モノイドプログラミング言語の作成(MonIter C#スタイル版 バージョン1.2 (3)) 構文解析の概要 (Roslyn API) - C# | Microsoft Learnのサンプルを参考にして構文木を調べます。 フィボナッチ数列の例 引数で渡すバージョン mon fib(int x, int y) => x & …
自由モノイドプログラミング言語の作成(MonIter C#スタイル版 バージョン1.2 (2)) フィボナッチ数列の例 フィボナッチ数列の例を遅延評価ができるように書き直すと以下のようになります。型 eint が使えるようにします。 using eint = System.Collections.Ge…
自由モノイドプログラミング言語の作成(MonIter C#スタイル版 バージョン1.2) このプログラミング言語はもともと自由モノイドを無限個の積に拡張したものをプログラミング言語の実装から定義しようとしたものなのですが、 有限個と無限個の積については定義…
自由モノイドプログラミング言語の作成(MonIter C#版 バージョン1.2) 「Roslyn for Scripting」で C# のコードを実行できるようになりました。これについては簡単な説明が書かれた文献が見つかりませんでした。【レポート】C#でスクリプト実行できる Roslyn …
自由モノイドプログラミング言語の作成(MonIter C#版 バージョン1.1) C# のコードを生成するために構文の要素を変更します。C# の関数の定義ではパラメーターに型を指定しなければならないのでその部分を変更します。全体の構文は同じです。以前 C# のコード…
自由モノイドプログラミング言語の作成(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…