web-dev-qa-db-ja.com

スクリプト言語の作成に関する質問

たとえば、プログラミング言語またはスクリプト言語を作成するために誰かにお金を払いたかったとします。私が望むものを正確に理解するために、彼らはどのような種類の文書を必要としますか。

つまり、問題の新しいプログラミング/スクリプト言語を説明する標準のドキュメントはありますか?

12
J.T.S.

あなたが書く必要があるものは 言語仕様 と呼ばれます。

言語の文法(できれば Extended Backus-Naur-Form )とそのセマンティクスの説明を含める必要があります。

後者の部分については、説明を自分の言葉で書くことができます(ただし、正確に注意してください)または 形式的な意味 のいずれかです。

16
sepp2k

次のものが必要です。

  • 新しい言語を作成する理由
  • 哲学
  • セマンティック定義
  • トークンの字句説明
  • 構文分析の定義

あなたの言語はどのように異なりますか?その使命は何ですか?それは機能的ですか?オブジェクト指向ですか?メタ言語ですか?そのユニークな機能は何ですか?それは存在しない(または醜い方法で存在する)世界に何を与えるでしょうか?どのように物事を変えたいですか?コンパイルまたは解釈されますか? DSLまたは汎用言語?これはあなたの哲学であり、あなたの言語の設計について多くを指示します。

次に、紙の上で大まかな構文とセマンティクスをスクラッチアウトする作業を行います。これはあなたの意味定義になります...偽のコードを書くことはあなたの考えを発展させる素晴らしい方法です。これを行う方法の優れた例については、「Cプログラミング言語」をお読みください。それで遊びます。

次に、何らかの方法でトークンと構文を定義する必要があります。次に、プログラムはこれらをオートマトンに処理し、文字列を読み取って構文を処理できます。 YaccとBisonは、字句解析と構文解析にそれぞれ正規表現とBNFスタイルの構文を使用します。他の言語用のYaccやBisonのようなツールもあります。

また、何をすべきでないかを知るために言語理論/コンパイラの基礎も必要です。例としては、曖昧な文法、AST生成と操作の問題、そして一般的に自分の人生を単純にする方法が含まれます。理論を知ることは非常に重要です。以下のことから始めることを検討します。

コンパイラ:原則、テクニック、ツール(ドラゴンブック)
Cでのモダンコンパイラの実装 または Javaでのモダンコンパイラの実装

13
Aiden Bell

新しい言語を作成する時間の99.9%は完全に不要です。投資収益率は非常に低い可能性が高く、時間を無駄にしているだけです。

ほとんどの場合、影響を受けやすいスクリプト言語としてJavascriptを使用できます。また、ほとんどの言語で利用可能なパーサーがすでにあります。それらに適したパーサーを見つけることができれば、好きな他のスクリプト言語を使用することもできます。これらをプログラムに実装すると、必要な作業がはるかに少なくなり、利益が大きくなります。人々は別の言語を学ぶ必要はありません、彼らはあなたのAPIを学ぶ必要があります。そのはるかに良いソリューションです。

新しい言語を作成することはほとんど常に悪いことです。

8
TheLQ

言語の文法は [〜#〜] bnf [〜#〜] で記述できます。

たとえば、これは Pythonの文法 です。

3
grokus

.NETを使用している場合、これは私がしばらく前に偶然見つけたものです。私はそれを奇妙な目で見ただけでしたが、多分それはあなたに役立つでしょう: irony

Ironyは、.NETプラットフォームに言語を実装するための開発キットです。

0
DevSolo