1

おそらく私が見逃しているのは本当に単純なことですが、文字列が複数行に渡って何が悪いのでしょうか?

たとえば、Ruby は次のとおりです。

 text = <<END
     Some 
     text 
  END

Python は次のとおりです。

text = """
   Some 
   text
 """

C# は次のとおりです。

string text = @"
     Some 
     Text";

どちらが近づきますが、まだ @ 文字が必要です。

次のような 1 行を使用することの何が問題になっていますか。

 text = "
    Some 
    text
  "

この場合、文字列リテラルは、(") が単独で表示される場所で終了する可能性があると思います。そのように、途中で引用符が見つかった場合、それらは無視されます。

text = "
  He said "This is cool"
  But it wasn't , until "
 " //<-- quote mark alone  

Java、JavaScript、C#、C++、C、Ruby、Python などの多くのプログラミング言語で、単一引用符で複数行の文字列リテラルを使用しないようにする理由は何ですか?

4

3 に答える 3

3

まず、解析するのは恐ろしいことです。残りの文法がどれほど単純かによっては、この単一の「便利な機能」によってフロントエンドの桁がさらに複雑になる可能性があります。詳細については、dierreの回答を参照してください。

もう1つの理由は、そのような構文が危険である可能性があることです。引用符を忘れると、1つの大きな文字列とはるかに小さなプログラムができます;)

第3に、複数行の文字列はそれほど頻繁には必要ありません特に、CやPythonのように、複数の行にまたがって隣接するリテラル文字列を連結する言語では)。上記の欠点と比較して、それは報われません。

于 2010-08-24T21:01:41.023 に答える
2

必要な特定の構文を考えることができる唯一の理由は、文字のエスケープについて心配する必要がないからです。これが理由かどうかはわかりませんが、この構文の利点であることは確かです。

最後の例は、単一のトークンを使用して複数のことを行うため、構文を定義する必要がある場合に少し問題があります。これは"、標準の LALR(1) では簡単ではありません。正しいルールを予測するには、入力でより多くのトークンが必要になります。使用する。

LALR パーサーの詳細。

于 2010-08-24T20:43:37.527 に答える
0

私はこれの一部がまともなフォーマットを許可しようとしているのではないかと思います。

CまたはC++では、長い文字列を1つの長い文字列としていつでも記述できますが、これは右方向に拡張され、折り返されると見苦しくなります。分割できるようにすると、プログラムのフォーマットをそのまま維持するのが簡単になります。通常、CおよびC ++プログラムは、言語を変更してより便利にするために、複数行の文字列を多用しません。

行末などを文字列で明示的に表示し、周囲のプログラムのフォーマットを維持できるようにすると便利なことがよくあります。また、リテラル文字列を希望どおりに記述できると便利な場合もあります。Ruby、Python、およびC#の例は、リテラル複数行文字列を希望どおりに記述できる方法を示しています。

あなたの提案は、RubyやPythonの例のようにフォーマットに侵入し、実際にはより良い解決策のようには見えません。これらの文字列を通常の文字列と混同するのは簡単ですが、RubyとPerlのヒアドキュメントとPythonの三重引用符は、これらの文字列が何であるかを正確に示しています。

于 2010-08-24T21:00:02.217 に答える