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


12

たとえば、私のためにプログラミング言語またはスクリプト言語を作成するために誰かに支払いたいと思ったとします。まさに私が望むものが何であるかを完全に理解するために、彼らはどんな種類の文書を必要とするでしょう。

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


これはプログラマではなくプログラミングに関するものであるため、おそらくStackOverflowに適しています。
ムアディブ

14
私はムアディブに同意しません。これはこの質問に適した場所だと思います。
クリス

5
独自のスクリプト言語を発明するのではなく、あなたとユーザーが新しい言語を習得しなければならないという膨大な作業を犠牲にして、既存のスクリプト言語を埋め込む方がよいと思います。Python、Javascript / ECMAScriptなどの一部の言語は、より大きなフレームワークに埋め込むことができるように設計されています。つまり、APIを設計し、スクリプトインタープリターを独自のプログラムに埋め込む方法を見つけるだけです。
ライライアン

1
言語がDSLになりやすい場合、これを行うことには利点があります。一般的な言語ではあまりありません。もちろん、LispやTCL
jk

回答:


16

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

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

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


1
BNFはコンテンツのない文法にのみ有用であり、スクリプト言語は常にTCLなどのコンテキストフリーではありません(ほとんどの場合、コンテキストフリーの言語を使用することが望ましいとはいえますが)
jk。

@jk。BNFは、コンテキストに依存しない自由言語にはまったく役に立たないとは思いません。コンテキストがどのようにコンテキストに依存していないかによって、構文をEBNFで指定し、単語のあいまいさを解決することは依然として意味があります。これは、たとえばC ++標準が行うことです。ほとんどの場合、言葉ですべてを説明したり、文脈依存または無制限の文法を使用してそれを指定したりするよりも、それがまだ明確だと思います。
sepp2k

本当、私のポイントは、複数の縮重の構文を持っている(実際にDSLを定義するための非常に優れている)などのLisp、TCLなどの言語が存在したとBNFは非常に少ないがわかりますので
JK。

@jk。確かに、しかしその場合、構文を記述する他の手段は、伝えるべき情報がほとんどないという理由だけで、同じようにほとんど伝えません。これは、仕様の構文部分が非常に短いことを意味します。
sepp2k

13

次のものが必要です。

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

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

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

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

また、禁止事項を理解するには、言語理論/コンパイラの基礎知識が必要です。例には、あいまいな文法、ASTの生成と操作の問題、一般的に自分の人生をシンプルにする方法が含まれます。理論を知ることは非常に重要です。私は次のことを始めることを検討するでしょう:

コンパイラ:原則、手法、およびツール(ドラゴンブック)
Cでの最新のコンパイラ実装またはJavaでの最新のコンパイラ実装


1
哲学の+ 1、DSLの場合は、ここでドメインを明確に特定する必要があります
jk)。

8

新しい言語を作成する時間の99.9%は完全に不要です。投資収益率はおそらく非常に小さく、時間を無駄にしただけです。

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

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


9
悪いことではない多くの時を除いて。独自のシンプルなDSLを作成することは非常に便利です。これで、独自の汎用言語を作成することは、あなたの答えが言うこととよりインラインになるでしょう。
ChaosPandion

@ChaosPandionが、多くの言語はすでにその言語のコードを使用するDSLの作成に優れています(つまり、rubyはこれに適しています)
代替案

2
私はあなたの答えに同意しますが、この質問に対する正しい答えではないと思います。質問者は、スクリプト言語を作成することの長所/短所ではなく、スクリプト言語を作成することの一般性を見ていると思います。
ティムマーフィー

ほとんどの場合、新しい言語を作成することが最良のソリューションです。en.wikipedia.org/wiki/Language-oriented_programming
SKロジック

3

BNFで言語の文法を説明できます。

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


6
ただし、文法だけでは、言語を実装するのに十分な情報ではありません。また、セマンティクスを何らかの方法で指定する必要があります。
sepp2k

0

.NETを使用している場合、私はしばらく前に偶然見つけました。好奇心をそそるだけでしたが、多分それはあなたにとって役に立つでしょう: 皮肉

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

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