[解決済み] プログラミング言語における文法と意味の違いは何ですか?
2022-05-10 14:57:08
質問
とはどのような違いがあるのでしょうか? 構文 と セマンティクス のようなプログラミング言語(C、C++)の?
どのように解決するのですか?
TL; DR
要約すると , 構文は、その文が言語の文法として妥当かどうかだけに関わる概念である。意味論は、その文が有効な意味を持つかどうかということです。
長い回答です。
シンタックスとは 構造 または言語の文法に関するものです。有効な文章を作るにはどうしたらいいかという問いに答えるものです。すべての言語、たとえ英語やその他の人間(自然言語)であっても、文法、つまり、文が適切に構築されているかどうかを定義する規則を持っています。
ここではC言語の構文ルールを紹介します。
- ステートメントをセミコロンで区切る
- IF文の条件式を括弧で囲む。
- 中括弧で囲んで複数の文を1つの文にまとめる。
- データ型と変数は、最初の実行文の前に宣言する必要があります (この機能は C99 では廃止されました。C99 以降では型が混在した宣言が可能です)。
セマンティクスとは の意味です。 についてです。この文は有効か?もしそうなら、この文は何を意味するのか?例えば
x++; // increment
foo(xyz, --b, &qrs); // call foo
は構文的に有効なC言語文です。しかし、それらは何を意味するのでしょうか?これらの文を実行可能な命令列に変換しようとすることさえ有効なのでしょうか?これらの疑問は意味論の核心にあります。
最初の文の ++ 演算子を考えてみましょう。まず第一に、これを試みることは妥当なのでしょうか?
- x が float データ型の場合、この文は(C 言語の規則によれば)意味を持たないので、エラーになります。 であり、構文的に正しいステートメントであるにもかかわらず、エラーとなります。
- もしxがポインタで あるデータ型 である場合、この文の意味は、 "サイズオブ値を追加する( あるデータ型 ) をアドレス x の値に追加し、その結果をアドレス x の場所に格納することです" 。
- x がスカラーである場合、ステートメントの意味は "アドレス x の値に 1 を追加し、その結果をアドレス x の場所に格納します" となります。
最後に、いくつかのセマンティクスはコンパイル時に決定できないため、実行時に評価されなければならないことに注意してください。++演算子の例では、x がすでにそのデータ型の最大値である場合、それに 1 を加えようとするとどうなるでしょうか。別の例では、値が NULL のポインタをプログラムがデリファレンスしようとしたらどうなるでしょうか。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] YAML の文字列を複数行に渡って分割するには?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] Pythonで改行(行継続)をするにはどうしたらいいですか?
-
[解決済み] 静的型付け言語と動的型付け言語の違いは何ですか?
-
[解決済み] .の違いは何ですか?(ドット)と$(ドルマーク)の違いは何ですか?
-
[解決済み] Bashのシングルクォートとダブルクォートの違い
-
[解決済み] YAMLです。YAML の文字列には引用符が必要ですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] どなたか説明してください - for (int i = 0; i < 8; i++) [closed].
-
[解決済み] twigで文字列を連結する方法
-
[解決済み] はOCamlの構文糖でbegin.endですか?
-
[解決済み] Go golang、シンタックスエラー: unexpected ++, expecting :
-
[解決済み] PowerShellで"@"マークは何をするのですか?
-
[解決済み] OCamlにおける`and`キーワードの意味とは?
-
[解決済み] 文の前の感嘆符(!)は何を意味するのですか?重複
-
[解決済み] YAMLです。YAML の文字列には引用符が必要ですか?
-
[解決済み] IFステートメントを使用しているときに、シェルコマンドを複数行に分割するにはどうすればよいですか?
-
[解決済み] 様々な言語のコードをシンタックスハイライトするためのLaTeXパッケージ