7

私はコンパイラの作成を検討しており、「C」スタイルで何かを完成させた後、それを他のモデルに適応させることを検討しています。「自然な」プログラミング言語で見られると予想される構文構造は何ですか?

このコンパイラのターゲット プラットフォームは CLR であり、現在、レクサー/パーサーに Oslo+MGrammar を使用しています (おそらく、これは単にプレイするための言い訳であることがわかります)。

私のプロジェクトの目標の 1 つは、プログラミングが構造化された構文や要求よりも会話のように感じられるようにすることです。

これはもう少し伸ばしたほうがいいと思います。私が取り組んでいるアイデアの 1 つは、クラス宣言を段落のように読むことです。

    A Dog is a mammal.  It may Bark and Run.  To Run it
uses its feet to move forward. It does Lay.

...翻訳も...

public class Dog : Mammal{

    public Feet Feet { get; set;}

    public virtual void Bark() {}
    public virtual void Run() {
        this.Feet.MoveForward();
    }
    public void Lay(){}
}
4

9 に答える 9

13

「自然さ」の方向に極端に進んだ何かによって設計に情報が与えられるようにしたい場合、Graham Nelsonは、自然言語に基づくドメイン固有のプログラミング言語で、本当に驚くべき新しい仕事をいくつか行いました。このシステムはInform 7と呼ばれ、私の意見では、十分に分析に報いることができます。

Inform 7 の問題点の 1 つは、プレゼンテーションが完全に非プログラマ向けであることです。構文が何であるかさえ発見するのは簡単ではありません! しかし、私はその結果に非常に感銘を受けました。また、まったく新しいアイデアを提供する斬新なバインディング構造がいくつかあると信じています。非常に魅力的なパッケージの古いものだけではありません。チェックする価値があります!

于 2009-05-19T22:53:02.720 に答える
3

Inform 7 を見てみるという提案に賛同します。この 1 か月ほどの間、Inform7 を使ってインタラクティブなフィクションを書いてきましたが、Inform7 は実に印象的な言語です。私はまだ何かを作成しているのに、それをはるかに自然な方法で記述しているため、通常のコーディング言語からの新鮮な出発点であることがわかりました。

たとえば、これは Inform7 の完全に有効な (短いとはいえ) プログラムです。

The Building Lobby is a room.  "You are standing in the lobby of a building."
There is a supporter called desk here.  "A large reception desk is to your right."  
There is a device called lamp on the desk which is switched off.  
There is a container called trash can on the floor next to the desk. 
There is a thing called crumpled paper in the trash can.
于 2009-08-25T01:38:48.127 に答える
1

あなたの声明:

A Dog is a mammal.  
It may Bark and Run.  
To Run it uses its feet to move forward. 
It does Lay.

本当の自然言語のようには聞こえませんが、一種の制御された言語です。

機械が理解できるセマンティクスを持つ 2 つの例は、概念グラフに マップされるAttempto Controlled Englishと、データ モデリング言語として使用されるGellishです。

「犬」に関するあなたの発言の直訳は思いつきません。最初の発言は哺乳類のサブタイプである犬について話しているように見えますが、その後、単一のインスタンスについて話し始めます。たとえば、既存の制御された言語を使用するには、もう少し厳密にする必要があります。

Every dog is a mammal.
Every dog may bark, or run.
To run is a forward movement.
Every dog uses its feet to run.
Every dog does lay.

(ただし、これにより、敷設についての考えが時々失われます)


「用途」とは何を意味するのでしょうか。

あなたの例では、「用途」は何を意味していましたか?

そしてオブジェクト「Dog」のインスタンスメソッドを記述していました。「スポットは犬だ」などとは決して言いませんでした。Spot が実行を開始します。」</p>

「犬」はオブジェクトですか、それともすべての犬のクラスを指していましたか? あなたはすべての犬について言及しているように見えましたが、ほとんどの統制された言語ではその区別が必要です。「犬は哺乳類です」 vs 「犬は庭にいます」. これは、nlp の書籍では「ゾウの問題」と呼ばれています。

私にとって、これはインスタンスを作成し、インスタンスに実行を指示します。

犬の静的メソッドをどのように説明すればよいかわかりません。

自然言語には「静的メソッド」などというものは存在しないのに、自然言語から派生したものでそのようなことを記述できると期待するのはなぜですか?

「議論のトピックが犬の場合、樹皮は動詞です」というスコープを持つリレーションをスコープ定義できますが、リレーションのスコープを定義するための呼び出しはあまりありません (静的メソッドは、そのクラス内で定義されたスコープ); 通常、あいまいではありません。

于 2009-07-05T15:49:47.067 に答える
0

Rebol解析機能を見てください。ルールに基づいてDSLを定義できます。最小限のコードで簡単に期待に応えることができます

于 2009-10-14T05:52:14.373 に答える
0

最近見た限りでは、最も「自然な」プログラミング言語は、特定のドメイン向けに構築できます。一般的なプログラミング言語を使用すると、物事がより一般的になる必要があり、その結果、自然に読めなくなります。私は、CSS は非常に自然なプログラミング方法であると考えています。一般的な使用言語を、私が見たよく構成された Ruby コードよりも自然に読みやすくするのは難しいと思います。一方、特定のドメインを扱っている場合は、限られた語彙を扱うだけで、驚くべきことができます。

于 2009-05-19T23:01:11.203 に答える