15

作業中のプロジェクトの一部として、プログラミング言語のインタープリターを実装する必要があります。このプロジェクトの詳細は、インタプリタを最初から実装する必要があること、既存のプログラミング言語を使用できないことを除いて、あまり関連性がないと思います(要件には、ポータブルで区切られた継続のサポート、および書き込みが可能であることが含まれます) JavascriptおよびJavaでのインタプリタ)。

明らかに、まったく新しいプログラミング言語を発明することは避けたいので、コピーできる、または少なくともインスピレーションを引き出すことができる非常に単純な言語があることを望んでいます。

私が最初に考えたのはForthまたは初歩的なLispのような言語でしたが、Java、Python、Rubyなどのより一般的なプログラミング言語に近い構文を使用することを強く望んでいます。特に、これは中置演算子(a + b)をサポートし、変数のa=b代入もサポートすることを意味します。

言い換えれば、私はこの言語を今日PHPでプログラミングする人々にかなり馴染みがあると感じてもらいたいのですが、ForthもLispもこの基準を満たしているとは思いません。

誰かがそのような言語について何か提案をすることができますか?

4

12 に答える 12

15

LispとForthには最も簡単な素朴な通訳者がいると思います。

単純な動的言語を選択できますが、最も難しいのはパーサーの構築です。たとえば、JavaScriptのサブセットが機能する場合があります。インタプリタは基本的にASTをトラバースし、各ノードの操作を実行します。

いずれにせよ、開発環境に組み込むことができる既存のスクリプト言語を調査し、絶対に独自の言語を使用することは避けてください。コンパイラーの実装(広い意味で)は非常に楽しいですが、長期的には維持するのに費用がかかる可能性があります。

于 2010-10-13T22:58:59.997 に答える
12

これはLuaの仕事のように聞こえます。

  • これは小さな言語であり、実装が簡単になるように設計されています
  • Javaにはすでにいくつかの実装があり、少なくともJavascriptでは進行中です。
  • その構文は要件(割り当て、中置演算子)を満たしています。

あなたが残した仕事は、区切られた継続を実装することですが、Lisp/Schemeを除外したときにすでにそれを知っていました。

于 2010-10-15T17:28:22.177 に答える
8

Tcl。構文はLispとほぼ同じくらい単純で、expr中置演算用のprocがあります。ブロックにも使用{}されるので、目を細めて見れば、Cのような言語だと人々に伝えることができます。

中置記法はありませんがa=b、一般的な中置記法の道を歩み始めると、言語は非常に速く複雑になるため、他の要件とどのように互換性があるのか​​わかりません。

于 2010-10-13T23:34:28.747 に答える
6

SmalltalkIoはどちらも、素晴らしくシンプルですが表現力豊かな構文を持っています。

于 2010-10-14T03:21:45.550 に答える
4

Brainfuck?つまり、それぞれが1つの文字にマップされる8つのコマンドがあるということです。

于 2010-10-13T23:03:55.460 に答える
4

ロゴは、括弧と数百の実装がない単純なLispのような言語です。

ウィキペディアのロゴ情報

実装については、このPDFを参照してください:ロゴツリー

于 2010-10-14T09:09:49.773 に答える
2

最初にLISPインタプリタを構築します。これは比較的簡単です。

追加の機能要件に邪魔されることなく、言語解析で多くの経験を積むことができます。

于 2010-10-13T23:09:43.370 に答える
2

これは、有用な最終製品への欲求と同じくらい、あなた自身の啓蒙のための演習であると思います。

その場合、少なくとも最初のパスでは、特にこれまでにこれを行ったことがない場合は、Lispのような言語のバリアントを推奨している他の人たちに同意する必要があります。

Luaは、この種のスクリプト言語として非常に人気があり、小さな、特にパフォーマンスの低いユーザースクリプトを必要とします。

また、javascript自体(またはサブセット)が要件を満たしているかどうかを検討することもできます。

こちらのリストも参照してください:http: //en.wikipedia.org/wiki/Continuation#Programming_language_support

于 2010-10-13T23:17:33.527 に答える
1

単純なコンパイラをゼロからブートストラップする

于 2010-10-16T03:19:41.013 に答える
1

PCF

于 2010-10-13T23:17:20.280 に答える
1

Lispサブセットを使用しても、甘い表現、または少なくとも中置記法を使用する場合は、より自然な表記法を使用できます。

  • Curly-infixは、{a + b}を(+ ab)と読み取ることで中置を追加し、f(x)のような従来の関数表記をサポートします。詳細については、SRFI-105を参照してください。

  • Sweet-expressionsは、curly-infixに基づいて構築され、構文的に関連するインデントを追加します。詳細については、SRFI-110をご覧ください。そのURLはhttp://srfi.schemers.org/srfi-110/です (SRFI-105の場合は、「110」を「105」に置き換えてください)。

どちらもReadableLispS式プロジェクトによって実装されています:http: //readable.sourceforge.net/

楽しみ!

于 2013-03-14T22:58:15.690 に答える
0

lispのサブセット(基本的にはcar、cdr、cons、quote)から始めることをお勧めします。無効な文字を処理し、次に無効なタイプを処理する基本的なスキャナーがあることを確認してください(consには2つの引数が必要で、2番目はリストである必要があります)。これは、基本的なデータ構造の知識があれば実行できます(リンクリストだけでも実行できますが、二重リンクまたは循環の方がはるかに優れています)。

于 2010-10-13T23:29:55.990 に答える