基本言語の基本機能は?DSLの提案?


9

ようやくインタプリタとコンパイラを作成することの背後にある複雑さを理解し始めました。この時点に到達する前に、TinyBasic、1964(Dartmouth)Basicのいくつかのバージョンと、これらの言語での独自の拡張を構築しました。最新のプロジェクトは、私がオープンソースベーシックと呼んでいるプロジェクトです...人が興味を持つ言語の他の機能は考えられなかったからです。言語のソースを開き、複雑な処理がどのように行われるか(スキャン、解析、解釈、およびコンパイルがどのように行われるか)を理解できるようにするため

Open Source Basicは、最初にスタックベースの言語に解釈されます。次に、そのスタックベースの言語が解釈されてすぐに実行されるか、CLR実行可能ファイルに変換されます。

私の質問はすべてこれに要約されます:

  • Basicベースの言語の基本的な機能/構成は何ですか?私はこれらの基本的な構成をすでに持っています:割り当て、式、変数、いくつかの関数(ランダム、ToUpper、ToLower)、ループ(forおよびdo-while / until)、If(ブロックおよび単一行)Else決定、コンソールベースの入力(入力)、出力(Print)、およびサブルーチン(まだパラメーターなし)。
  • 基本的な構成を自分の言語に追加する「完了」したら、どのように分岐する必要がありますか?どのドメインに?言い換えると、すべてのジェネリック構造を機能させたら、オープンソースの基本言語はどの方向に進むべきでしょうか?

お時間をいただきありがとうございます

ドミニク


3
私は、組み込みの構文サポートされたAOP機能を備えた言語を常に望んでいました。
FrustratedWithFormsDesigner

@Dominick:LINQ機能はどうですか?
プレデター

@Frustrated ... AOP-アスペクト指向プログラミング機能?例を挙げていただけますか?
Dominick

5
基本的な必須機能からドメイン固有の言語を発明することは始めるべきではありません。最初にドメインを形式化し、この知識を言語に変換し、基本的な機能が必要な場合にのみ追加します。おそらく、チューリング完全ではない完璧なDSLになってしまう可能性があり、それはDSLの最高の特性の1つです。
SKロジック

1
確かに「goto」はBASICの必須機能ですか?
ペリー

回答:


1

コモドール[Vic-20、C-64]での初期のBASICの経験から、行番号はBASICの中心的な「機能」であるという印象がありました。それは現代の実装ではもはや使用されていないようですが、BASICについての私の主な見方は、他の何かへの出発点となる学習言語であるので、それは私にとっては不利な点です。


1

確かに高貴な努力ですが、あなたは優先順位を逆転させたと思います。

あなたの最初の関心事はあなたの言語が対処することを目標としている「ドメイン」問題であるべきです。そのため、そもそも「ドメイン固有言語」と呼ばれています。DSLが許容できるのは、DSLが小さく、シンプルで、ナイフをバターに通すなどの特定の問題を解決するために非常に狭い範囲に限定されている場合のみです。

ドメインを特定し、そのドメインで言語がどのように機能するかを確認したら、特定の構造または機能を配置できます。

最後に、内部DSLが必要か外部DSLが必要かを検討することは役立つかもしれません。


0

私はCAE / FEAアプリケーション用のスクリプト言語を開発しており、エンドユーザーに役立つと思われるいくつかの機能は次のとおりです。あなたがあなたが言及した機能は、最初から非常に強力な言語にする必要があります。次に、ユーザーの要求に応じて開発します。


それは興味深く非常にドメイン固有の言語です(コンピューター支援エンジニアリング/有限要素分析)。行列が必要な理由がわかります。あなたの提案はすべてかなり良いものであり、私はそれらを覚えておきます。ありがとう。
ドミニク

0

すでに存在する場合、追加または拡張できるいくつかの機能がありますが...

...基本的なプログラミング言語はスクリプト言語と非常によく似ており、多くが見落としたり、後で含めたりした機能は名前空間またはモジュールでした。

C、C ++、PHP、Visual Basic、モジュール/名前空間なしで開始、後で追加された場所

次は、サブルーチン(値を返さないプロシージャまたは関数)と関数(特別な値を返すサブルーチン)です。


0

複雑な処理がどのように行われるかを理解する(スキャン、解析、解釈、およびコンパイルがどのように行われるか)

Stack Overflowのサイトで、コンパイラーを理解するためのリソースに関する素晴らしい質問があります。あなたはまた私を見て持つことができるコンパイラクラスのページを

基本的な構成を自分の言語に追加する「完了」したら、どのように分岐する必要がありますか?

すでに構築した機能を踏まえて、int、string、booleanの3つのデータ型を追加することをお勧めします。あなたは3つのことをする必要があります、それぞれが以前のものより少し難しいです:

  1. 文法を変更して、それらのキーワードを解析できるようにします。テスト。
  2. 変数名やその他のプロパティとともにデータ型を含めることができるように、シンボルテーブルを作成(または既存のテーブルに追加)します。次に、デバッグスイッチを作成して、これをテストし、シンボルテーブルを確認します。
  3. MsILへのコード生成前または解釈中に互換性のある型を確認してください。すべてのタイプの各実行モードでエラーと非エラーの両方のケースをテストします。

それがうまくいけば、スコープで作業することをお勧めします(サブルーチンのローカルとグローバルの比較)。アドバイスが必要な場合はお知らせください。

幸運を。そしてお楽しみください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.