4

これはおそらく非常に奇妙な質問であり、間違いなくそうです。プログラミング言語が従来の方法でどのように作られているかについてはあまり詳しくないので、構文のないプログラミング言語を設計することは可能でしょうか? これは、すべての入力が有効で、特定の計算を実行し、同じ入力が常に同じことを行うことを意味します。構文エラーは発生しません (ロジック エラーと実行時エラーは許容されます。プログラムがクラッシュしたり、ランダムな計算を実行したりする可能性があります)。

私がこれを考えたのは、遺伝学は基本的に、私の理解ではそのようなものだからです.

編集:いくつかの誤解があると思います。シンタックスレスとは、すべての入力が計算され、インタープリター/コンパイルされたプログラムがその特定の一連の命令に従うことを意味しますが、ランダムである可能性があります。

また、すべての入力には 1 つの出力しかないという事実に一致する必要があります。構文エラーなどがあると、そのルールに違反します。

編集 2 多くの人が構文部分でハングアップしています。構文は忘れて、ANY 入力がUNIQUE出力を生成するという事実に注目してください。

4

7 に答える 7

8

すこし。

構文は入力の順序を指します。したがって、意味が順序に依存しない言語があり、入力の形式に関係なく意味のある「文」を作成できる場合は、そうです。構文のない言語を使用できます。そのような言語は、何らかの形で大文字と小文字を区別するか、入力のすべての可能な分離可能な項目(トークン、文字など)の意味を単に定義する必要があります。そのようなアイテムの順序に依存することはできませんが、それらの数に依存することはできるので、それは何かです。

全体として、操作的意味論は通常構文に依存するため、かなり難解です。ほとんどの人にとって、その依存関係が厳密に必要ではないことはすぐにはわかりません。チューリング完全ではない構文のない言語は次のとおりです。

  • 文字を数えaます。
  • 文字を数えbます。
  • 他のすべてを無視します。
  • 2つのカウントの商を生成します。

そして、これがチューリング完全なものです:

  • 文字を数えaます。
  • 文字を数えbます。
  • 他のすべてを無視します。
  • 文字数のバイナリ表現を取りaます。
  • 文字数に等しい数のゼロを接頭辞としてb付けます。
  • 結果をJotプログラムとして評価します。

それではまた、うさぎの穴はどれくらい深くなりますか?入力の基本単位は何ですか?バイトまたは文字の場合、使用できる入力トークンの配列は膨大です。ただし、文字内のビットに基本的な順序があることを認める場合は、問題をさらに減らし、0ビットの数と1ビットの数だけに依存する必要があります。意味のあるプログラムを構築するための情報。私のチューリング完全な例を見て、それぞれ「クリアビット」と「セットビット」に置き換えaてください。b

もちろん、Lispはある意味で構文がないということも議論されています。なぜなら、その構文は、データとしてのプログラム全体は言うまでもなく、プログラムの抽象的な構造を直接表現しているからです。実際、Lispとその派生物は、構文と意味が1対1で対応しているため、厳密に構文がないわけではありません。整数リテラルと同じように、Lispプログラムは事実上1つの大きなコードリテラルにすぎません。

于 2011-05-08T04:30:59.373 に答える
3

同じ入力が常に「同じこと」を行う場合、入力の使用方法を管理するルールがあります。これらのルールは構文です。構文がなければ、構造はありません。だから、いいえ、不可能です。

構文エラーのない言語を作成できるかどうか疑問に思っている場合は、確かに...必要なのは、コンパイラー(またはインタープリターなど)に、そうでない入力に対して固定出力を出力させることだけです。より便利な構造を持っています。1、0、または「入力ありがとうございます」を出力できます。もちろん、「構文エラー」など、よりわかりやすいものを選択することもできます。

コンピューターコードと遺伝暗号の間に正確な類似点はないと思います。ただし、DNAをタンパク質に翻訳するプロセスをコンパイルのようなものと考える場合、実際にタンパク質をコードしているのはごくわずかな割合のヒトDNAのみであることを覚えておく必要があります。私たちのDNAのほとんどはノンコーディングであり、おそらく構文エラーの遺伝的バージョンでいっぱいです。

于 2011-05-08T04:28:54.537 に答える
3

入力文字セット(たとえば、[a-z0-9])を定義し、そのセット内のすべての文字列が有効なプログラムであるプログラム言語を作成できます。たとえば、この言語を考えてみましょう(ここで、?は任意の文字を表します)。

a? : add one to register ? if ? is a numeral, nop otherwise
b? : subtract one to register ? is a numeral, nop otherwise
p? : print register ?

他の2文字のシーケンスはnopです。文字列の最後に余分な文字がある場合、それはnopです。

これは要件を満たしています。チューリング完全にするのは難しいことではありません(j?レジスターに保持されているアドレスにジャンプすることを意味しますか?、s?レジスター0の内容をアドレスに格納することを意味しますか?)。

ただし、構文エラーの場合にnopを実行する実行可能コードをCコンパイラで生成するだけで、これがどのように異なるかはわかりません。

于 2011-05-08T05:06:35.803 に答える
3

逆ポーランドがあなたの定義を満たすと思います。少なくとも入力ストリームの最後に到達するまでは、ランダムな値の文字列 (すべて同じ型) と二項演算子を入力してもエラーは検出されません。

于 2011-05-08T04:41:23.433 に答える
2

言語は、それらをどのように解釈するかに完全に依存します。非常に複雑かもしれない構文がなければなりませんが、そうでなければなりません。あなたがした質問のように英語で、それは適切な文法構文を持っていました、そしてそれが私がそれを理解した理由です。自然言語を検出し、それに基づいてコマンドを導出するようなプログラミング言語を作成できれば、「電卓を作ってくれませんか」のように、コンピューターが電卓を作ってくれます。構文なしとは、それほど厳密ではない構文を意味します。たとえば、ドイツ語で話す場合、私は単語を理解できません。つまり、解釈して反応するはずの構文を検出できませんでした。代わりに、「この男が何を話しているのか」または「これはドイツ語を話す男?」そのため、解釈が異なります。構文はおそらく、システムが環境や状況から学習することによって動的に生成する構文を意味します。それがどのように解釈されるべきかを伝えるために、実際には2つの間にプロトコルが必要であり、それが構文です。

于 2011-05-08T04:33:19.887 に答える
1

遺伝子コードでさえ、計算できないコード (突然変異、四肢の欠落など) が導入されるとエラーになります。

于 2011-05-08T04:24:14.493 に答える
-1

いいえ 。ある時点で、プロセッサは、ハード ドライブに配置されたランダムながらくたをどう処理するかを知る必要がありますが、それが任意であってもかまいません。システムごとに異なる場合でも、それは依然として構文です。

于 2011-05-08T04:20:38.000 に答える