Cは通常の言語ですか?


8

CまたはC ++は通常の言語ですか?そうでない場合、どのカテゴリにC / C ++、perl、Pythonなどのプログラミング言語を配置しますか?


いいえ、egrepは通常の言語です。Cはそうではありません。
tchrist

ほとんどのプログラミング言語は、ある種の文脈自由言語です。これが、通常、コンパイル時にツリーとして表される理由です。en.wikipedia.org/wiki/Context-free_grammar
Laurent Bourgault-Roy 2013

1
@ LaurentBourgault-Roy CFGがあったとしても、通常はCFGの外側に追加のルールが適用されるため、ほとんどがコンテキストフリーではなかったと思います
jk。

正規表現でさえもはや規則的ではありません
CodesInChaos '09 / 02/14

回答:


30

「正規言語」について私が知っている唯一の普遍的な定義は、確定的有限オートマトンで解析できるもの、または真の正規表現として表現できるものです(現在の多くの実装では拡張REではありません)。正規表現は一連の文字で書くことができ、無限の繰り返しと代替の選択が可能です。

CとC ++はどちらも中括弧、角括弧、括弧を任意の深さにネストできるため、これらは通常の言語ではありません(詳細については、Pumping Lemmaをご覧ください)。


2
どんな種類の数値式も許可しないので、どんな用途のプログラミング言語も正規のものになることはできないと付け加えます。
Giorgio

1
@Giorgioでは、数値式を正規言語(演算子と数字で始まる、数字で終わる交互のシーケンス)として解析できます(優先順位付きで)解析しますが、文法が必要です
ラチェットフリーク

@ratchet freak:括弧をどのように処理し(1 + 2) * 6ますか?
ジョルジオ

@ジョルジオ私は「括弧なし」を追加すべきだった
ラチェットフリーク

1
@Giorgio:構文的に正しい接尾辞式が通常の言語を形成しないことは自明です。どんなに。スタックチェックが実行時まで延期されている限り、言語は正規表現と後置表現を含む任意の表現のどちらでもかまいません。Forthは優れた例であり、dcもその1つです。
david.pfx 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.