言い換えれば、すべての可能な文字列が有効な構文である言語ですか?
編集:これは理論的な質問です。そのような言語を使用する
ことに興味はありません。私はそれが可能かどうかを尋ねているだけです。
さらに編集する
そのような言語を設計しました。ErrorFreeを参照
instruction operand*
ここで、オペランドはレジスタまたは0〜127の数値(およびそれ以上はレジスタとして扱われます)マルチアリティ命令の場合、「0」が想定されます。
言い換えれば、すべての可能な文字列が有効な構文である言語ですか?
編集:これは理論的な質問です。そのような言語を使用する
ことに興味はありません。私はそれが可能かどうかを尋ねているだけです。
そのような言語を設計しました。ErrorFreeを参照
instruction operand*
ここで、オペランドはレジスタまたは0〜127の数値(およびそれ以上はレジスタとして扱われます)マルチアリティ命令の場合、「0」が想定されます。
回答:
はい、特定の言語のすべての文字列に対して常に良好な最終状態で停止する決定論的チューリングマシンを作成する非常に分析的な方法でこれを見ると、それが可能であることがわかります。デモンストレーションは非常に簡単です。次のように、トランジション関数が1つだけのトランジション関数を備えた通常のTMが必要です。
TF(w,q) -> (w,Qa)
Considerations:
L = { w | w is any possible string }
w e L
q e Q
F is a set with all good final states {Qa,Qr}
Qa e F
TMは、実生活のコンピューターと同じ計算能力を持っていることが実証されているため、これは絶対に可能です。
はい、もちろんそれは可能です。それは簡単なことです。
<programm> ::= char | char <program> |
誰が「ノー」と言うことができるかわかりません。そうは言っても、そのような言語に意味のある意味を定義するのはかなり難しいかもしれませんが、それも可能です。空白を見てください。
有効な構文の意味に依存すると思います。
任意の文字列を受け入れ、特定の意味が規定されていないものはすべて無視する言語を設計できます。これは基本的に「構文エラーは取り除きますが、エラーではない」と言っているのと同じです-かなり無意味で、多くの理由で非常に望ましくありません。
それを超えて、構文エラーのない言語を作成できる唯一の方法は、すべての可能な文字列に有効な命令/使用法を関連付けることです。私がそれを確認できる唯一の方法は、すべての操作を単一の文字として使用し、すべての単一の文字に操作が割り当てられていることを確認することです。
これには数百万の間違いがあります-明らかに予約語はありません、それは文脈で使用されている場所に関するものであり、その結果、基本的に判読できず、構文エラーからの免疫は他のあらゆる種類を経験する可能性がはるかに高くなりますエラーの。
理論的には可能ですが(AmmoQは私よりもはるかにきちんとしています)、まったく望ましくありません。
Ahbefiasdlk aslerhsofa; f jwi [asdfasdf] aew /&Q!@#$} {;-P
それはどういう意味ですか?
言語に構造と文法がある限り、常に構文エラーの概念があります。問題は、それを実施するかどうかです。人々は間違いを犯し、構文エラーは、ほとんどの言語設計者がプログラマが愚かな間違いを避けるのを助けるために到達するものです。
構文エラーは、プログラマーが言語に意味のないコードを記述することによって生じるエラーです。
上記の定義に基づいて構文エラーを取り除くことは不可能です。識別子のつづりが間違っています。メソッド名のつづりが間違っています。言語が静かにスペルミスを受け入れて、幸せに何もしないことは、楽しい経験の私の考えではありません。
有効なUnicode文字(または文字シーケンス)を識別子として使用できる言語を設計することができます。同じものとして認識されるように同等の文字/文字シーケンスを正規化するなどの課題がありますが、それは可能です。注:Unicode正規化には4つの標準タイプがあります。