2024-11-01から1ヶ月間の記事一覧
モノイド的構文解析言語 MonParser (C# 形式 バージョン 0.2) MonParser (BNF 形式)の構文解析 「par」はパーサーを表すクラス、「syn」は構文木を表すクラスです。 par str(string s) => par.StringRegExp(s); par st(string s) => par.String(s); par opr(…
モノイド的構文解析言語 MonParser - MonParser の構文解析(C# 形式) MonParser (C# 形式) バージョン 0.2 演算子を使うように仕様を変更します。演算子を多用すると何が書いてあるかわかりにくくなりますが、簡潔に書くことができるので全体の構成が把握し…
モノイド的構文解析言語 MonParser - MonParser の構文解析(C# 形式) MonParser (C# 形式) バージョン 0.1 最初に定義した MonParser は BNF を Python 版 MonIter の形式で書くものです。これは BNF 形式ということにします。MonParser (C# 形式)を MonPars…
モノイド的構文解析言語 MonParser - MonParser の構文解析(C# 形式) MonParser の構文を MonParser (C# 形式)で書きます。 「str(文字列)」は構文木で使われない文字列を表します。正規表現を使うことができます。 「op(文字列)」は構文木で使う文字列を表…
モノイド的構文解析言語 MonParser - MonParser の構文解析 MonParser の構文を MonParser で書きます。 def string = /".*"/; def operator = /'.*'/; def identifier = /[A-Za-z_][A-Za-z0-9_]*/; def constructor = /[A-Za-z_][A-Za-z0-9_]*/; def term =…
モノイド的構文解析言語 MonParser - 構文木の構成 文字列から構文木を作ることができるようにします。この言語を MonParser と呼ぶことにします。文字の集合 で生成された自由モノイド の冪集合 (これを表す一般的な記法は知らないのでここではこう書きます…
繰り返しの記法を追加します。また、C# 版では数値の演算が追加されていたのでそれも追加します。 かっこを使うことができるとします。 「式 *」は式の繰り返し(一回もない場合も含む)を表します。 「式 +」は式の繰り返し(一回は必要)を表します。 「式1 &*…
構文解析をモノイドで表す方法について調べます。さらに和集合を和とすると冪等半環(dioid)となるので冪等半環で表す方法について調べます。自由モノイドのイテレーター(6) - エレファント・ビジュアライザー調査記録の Python の lark モジュールの例は自由…
自由モノイドプログラミング言語の作成(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): 構文木を評価して無限版自由モノ…