回答受付終了まであと7日

プログラミング言語は文脈自由文法で作られているとか言いますが、具体的にどこにそれが使われているのですか? 文字 < 字句 < 文 < 言語

回答(5件)

> プログラミング言語は文脈自由文法で作られているとか言いますが 以下の通り、まずこの前提が間違っています。 https://ja.wikipedia.org/wiki/文脈自由文法 > 「文脈自由文法はほとんどのプログラミング言語の文法を記述できるほど強力であり、実際、多くのプログラミング言語は文脈自由文法で構文仕様を定義している。」といった言説がしばしば見られるが[注釈 1]誤りである。本当に実際の所は、yaccで定義されていても、純粋に構文では定義しきれない部分をあれこれと意味規則で補っているのが普通である。 > それとも、構文規則として使われるBNFや構文木が文脈自由文法のうちだと言いたいのですか? 言いたいことはそうだと思いますが、実際どのような意図だったのかは言った人に聞いてください。 第三者からは推測しかできません。 > 実際に文脈自由文法でどうやってプログラミング言語が生み出されるのか、簡単で具体的な生成例を挙げて欲しいです。 冒頭に挙げた通り、文脈自由文法「だけで」生成できるとは限りませんが、言いたいことを汲み取るなら、古典的なツールとしてyacc/lexやbison/flexがあります。 https://qiita.com/toru0408/items/483c77cb76198d4c6ceb

この回答はいかがでしたか? リアクションしてみよう

文脈自由文法について勉強するべきです。 とか答えたいところですが、これ多分文脈自由文法について勉強している時に出た疑問なのでしょうね。 正規表現やら何やらは文脈自由文法ではありません。正規文法です。文脈自由文法は正規文法を含みます。つまり文脈自由文法の中には正規文法ではない物も含まれますが、正規文法は必ず文脈自由文法です。 BNFはまさしく文脈自由文法を記述する為の言語と言えるでしょう。正規表現が正規文法を記述する為の言語であるのと同じように。そして構文木は、BNFで受理した結果の表現の一つである「データー構造」です。 >例えば文脈自由文法で int num =5; を生成できるんですか?どうやって?? 「言語を生成する」のは人間です。「受理する」のです。なので、こうです。 <文脈自由文法で int num =5; を受理できるんですか? こうです。そして質問者様が期待していた回答に最も近いと思われるのは、C言語やJavaをBNFで記述することでしょう。 ですが質問者様はBNFでCやJavaの文法が記述できることを知っているだろうと私は推測していますのでここには書きません。 これにて齟齬は埋まったものと考えます。

> プログラミング言語は文脈自由文法で作られているとか言いますが、 間違いです。 以上。

AIが正しいかどうかは僕にはわかりませんが、一応、「プログラミング言語の構文規則は、文脈自由文法に基づいて定義されています」という回答をしているようです。 これは間違っているのですか?

AIアイコン

AIからのお助け回答

AIアイコンClaude 3(Anthropic)

プログラミング言語の構文規則は、文脈自由文法に基づいて定義されています。具体的には以下のように使われています。 ・字句解析(トークン化)の規則は、正規表現や有限オートマトンで定義されます。これは文脈自由文法ではありません。 ・構文解析の規則は、通常BNF(Backus-Naur Form)という文法記述で定義されます。BNFは文脈自由文法の一種です。 例えば、以下のようなBNF規則で「int num = 5;」を生成できます。 プログラム → 文 文 → 変数宣言文 ; 変数宣言文 → 型 識別子 = 値 型 → int 識別子 → num 値 → 5 この規則に従えば、「int num = 5;」という文字列を合成的に生成できます。 ・構文解析器は、この文法規則に基づいて構文木を生成します。構文木は文脈自由文法の導出過程を表しています。 このように、プログラミング言語の構文規則は文脈自由文法に基づいて定義され、それに従って字句解析、構文解析が行われるのです。

AIアイコンみんなの知恵袋

過去のベストアンサーを参照してAI(GPT-4o)が回答!

みんなの知恵袋とは?

プログラミング言語の構文は文脈自由文法(CFG)を用いて定義されます。具体的には、BNF(バッカス・ナウア記法)を使って構文規則を記述し、構文木を生成します。例えば、「int num = 5;」を生成するには、非終端記号を用いて「文 → 型 変数 = 値;」と定義し、各要素を展開して解析します。字句解析には正規表現や有限オートマトンが使われますが、これらは文脈自由文法とは異なり、字句レベルでの処理を担当します。CFGは構文解析において、プログラムの構造を明確にし、コンパイラが正しく解釈するための基盤を提供します。

この回答は生成AIで作成したものであり、最新性や正確性等を保証するものではありません。その他注意事項はこちら