ロゴ
ユニオンペディア
コミュニケーション
Google Play で手に入れよう
新しい! あなたのAndroid™デバイスでユニオンペディアをダウンロードしてください!
無料
ブラウザよりも高速アクセス!
 

コンパイラ

索引 コンパイラ

ンパイラ(英:compiler)とは、コンピュータ・プログラミング言語の処理系(言語処理系)の一種で、高水準言語によるソースコードから、機械語に(あるいは、元のプログラムよりも低い水準のコードに)変換するプログラムである。.

118 関係: A-0 SystemALGOLAPLAutotools型システム十進法字句解析字句解析器定数畳み込み実行時コンパイラ中置記法中間表現中間言語二進法予約語事前コンパイラ低水準言語形式文法マイクロソフトマクロ (コンピュータ用語)マサチューセッツ工科大学ハードウェア記述言語バイトコードライブラリリロケータブルバイナリリンケージエディタレジスタ割り付けローダトランスコンパイラトークントップダウン構文解析ブートストラップ問題プリプロセッサプログラミング言語プロセッサパーサジェネレータビルド (ソフトウェア)データ型データフロー解析デッドコード削除フロントエンドニクラウス・ヴィルト制御フローグラフアルフレッド・エイホアーキテクチャアセンブリ言語インライン展開インテルインタプリタオブジェクトファイル...カーネギーメロン大学クロスコンパイラグレース・ホッパーコンパイラジェネレータコンパイラ最適化コールグラフコード生成シリコングラフィックスシンボルテーブルジョン・バッカススコープセルフホスティングセシィ–ウルマン法ソースコードサン・マイクロシステムズ再帰下降構文解析共通中間言語動的リンク動的プログラミング言語動詞C言語COBOLCommon LispCPU編纂編集組み込みシステムEBNFEDSACEval計算機科学高水準言語識別子麻宮騎亜逆ポーランド記法逆コンパイラFORTRANGNUコンパイラコレクションIBMJavaLexLISPLLVMMakeOberonOpenMPPascalPコードマシンPL/0PrologPythonSchemeSmalltalkSNOBOL携帯情報端末構文解析構文解析器構文木機械語正当性 (計算機科学)正規表現正規言語漫画木構造 (データ構造)有限オートマトン最適化最適化 (情報工学)情報工学 インデックスを展開 (68 もっと) »

A-0 System

A-0 System は、1951年と1952年にグレース・ホッパーが UNIVAC I 向けに開発した、コンピュータ上で動作する世界初のコンパイラである。現代的感覚で言えば、A-0 はコンパイラよりもむしろローダやリンケージエディタに近い。プログラムはサブルーチン呼び出しの羅列で構成される。サブルーチンは数値コードで指定され、そのサブルーチンの引数がサブルーチンコードの後ろに続く形式であった。A-0 System は、そのような記述を機械語に変換する。 A-0 System の後継として、A-1、A-2、A-3(ARITH-MATIC)、AT-3(MATH-MATIC)、B-0(FLOW-MATIC)が開発された。FLOW-MATIC が後のCOBOLのベースとなった。.

新しい!!: コンパイラとA-0 System · 続きを見る »

ALGOL

ALGOL(アルゴル)は、命令型プログラミング言語ファミリーの1つファミリー名は大文字/小文字をまじえて表記される場合 と、全て大文字で表記される場合 (ALGOL 68) がある。本項目では ALGOL で統一する。。名前「ALGOL」は「アルゴリズム言語」を意味する英語「algorithmic language」に由来する。1950年代中ごろに開発され、多くの言語に影響を及ぼし、ACMや教科書や学術論文などでアルゴリズム記述のデファクトスタンダードとして30年以上使われた。現代の多くの言語が「ALGOL系」あるいは「ALGOL風」(algol-like) とされているという意味で、ほぼ同世代の高水準言語である FORTRAN、LISP、COBOL に比べて最も成功したと言うこともできる。FORTRANで明らかとなった問題を防ぐよう設計され、BCPL、B、Pascal、Simula、Cといった様々なプログラミング言語に影響を与えた。ALGOLはLisp以外としては「begin と end で囲む」という構文によるブロック構造を導入し、制御構造を自在に入れ子(ネスト)にできる初の広まった言語となったFORTRANにはそのような構造は無い。COBOLではピリオドで全ての入れ子が終端するという仕様だったため(現在はend-ifなどを使う)、入れ子で書ける論理に制限があり、酷いバグの原因にもなりやすかった。。また構文の形式的定義を真剣に検討した最初のプログラミング言語でもあり、"Algol 60 Report" で導入されたバッカス・ナウア記法は、その後のコンピュータ言語等の構文の形式的定義を示す手法として(プログラミング言語だけに限られず)定番の記法となっている。.

新しい!!: コンパイラとALGOL · 続きを見る »

APL

APL(エーピーエル)は、プログラミング言語のひとつで、1957年のケネス・アイバーソンによる創案に基づいた独特の表記法を用いる。処理系の実装は、ほとんどが対話型インタプリタである。とくに多次元配列の柔軟な処理が特徴である。「APL」は「プログラミング言語」(a programming language) の略であるが、言語の特性から、ときに「配列処理言語」(array processing language) などとされる。.

新しい!!: コンパイラとAPL · 続きを見る »

Autotools

Autotools(autoconf と automake)による作業の流れ Autotoolsとは、主にUnix系オペレーティングシステム (OS) においてソフトウェアパッケージ開発を行うための、ツール及びフレームワークの一種である。このツールを使用することにより、多種多様なUNIX互換環境にパッケージを対応させることが容易になる。 Autotoolsは主に autoconf/automake/libtools の3つから成り立っている。.

新しい!!: コンパイラとAutotools · 続きを見る »

型システム

型システム(type system)とは、プログラミング言語において、その式などの部分が持つ値を、その種類(型(type)、データ型も参照)に沿って分類し、プログラムが正しく振る舞うこと、といった性質について保証する手法である。型システムは、型理論に基づいており、プログラミング言語の理論において最も確立された軽量形式手法である。.

新しい!!: コンパイラと型システム · 続きを見る »

十進法

十進法(じっしんほう、decimal system)とは、10 を底(てい)とし、底およびその冪を基準にして数を表す方法である。.

新しい!!: コンパイラと十進法 · 続きを見る »

字句解析

字句解析 (じくかいせき、Lexical Analysis) とは、広義の構文解析の前半の処理で、自然言語の文やプログラミング言語のソースコードなどの文字列を解析して、後半の狭義の構文解析で最小単位(終端記号)となっている「トークン」(字句)の並びを得る手続きである。字句解析を行うプログラムは字句解析器である。自然言語の字句解析については形態素解析を参照。.

新しい!!: コンパイラと字句解析 · 続きを見る »

字句解析器

字句解析器(じくかいせきき)は、字句解析をおこなうプログラム。lexical analyzer(レキシカルアナライザー)あるいはlexer(レキサー)と呼ばれる。 プログラミング言語処理系や自然言語処理などで使われる(自然言語処理では形態素解析とも言う)。代表的な字句解析器生成系にlexがある。lexなどを使用することにより、正規表現などで各トークンの字句規則を記述するだけで字句解析器を自動的に生成できる(字句解析プログラムのソースコードが出力される)。 GNUコンパイラコレクションでは手書きの字句解析器が用いられている。一般に、構文解析器に比べ字句解析器は手書きのほうが向いている。 Category:構文解析 (プログラミング).

新しい!!: コンパイラと字句解析器 · 続きを見る »

定数畳み込み

定数畳み込み(ていすうたたみこみ、constant folding)および定数伝播(ていすうでんぱ、constant propagation)は、多くのコンパイラで使われている最適化技法である。定数伝播の進化したものを疎な条件分岐を考慮した定数伝播と呼び、定数伝播と同時にデッドコード削除も行って、より正確な伝播を行う。.

新しい!!: コンパイラと定数畳み込み · 続きを見る »

実行時コンパイラ

実行時コンパイラ(じっこうじコンパイラ、、JITコンパイラ、その都度のコンパイラ)とは、ソフトウェアの実行時にコードのコンパイルを行い実行速度の向上を図るコンパイラのこと。通常のコンパイラはソースコード(あるいは中間コード)から対象CPUの機械語への変換を実行前に事前に行い、これをJITと対比して事前コンパイラ (Ahead-Of-Timeコンパイラ、AOTコンパイラ)と呼ぶ。.

新しい!!: コンパイラと実行時コンパイラ · 続きを見る »

中置記法

中置記法(ちゅうちきほう、infix notation)とは、数式やプログラムを記述する方法(記法)の一種。演算子を操作対象の中間に記述することから、このように呼ばれる。 その他の記法として、演算子を操作対象の前(左)に記述する前置記法(ポーランド記法)、演算子を操作対象の後(右)に記述する後置記法(逆ポーランド記法)がある。 四則演算など初歩的な算術においては、もっぱら中置記法が多用されている。.

新しい!!: コンパイラと中置記法 · 続きを見る »

中間表現

中間表現(ちゅうかんひょうげん、Intermediate Representation、IR)は、コンピュータがデータをクロスプラットフォームで扱うために使用するデータ構造の表現である。 中間表現を用いたデータの抽象化はコンピューティング分野では一般的な手法である。異なるプラットフォームで同等の情報を保持するデータを異なるフォーマットで扱う場合に、データを中間表現で表現することで複数フォーマットへの変換処理を効率化することを手助けする。これは自然言語の翻訳に中間言語を用いるのと同等のメリットがある。.

新しい!!: コンパイラと中間表現 · 続きを見る »

中間言語

中間言語(Pivot language)は、任意の言語を異なる任意の言語へ翻訳する際に利用する中間的な人工言語もしくは自然言語である。.

新しい!!: コンパイラと中間言語 · 続きを見る »

二進法

二進法(にしんほう)とは、2 を底(てい、基(base)とも)とし、底の冪の和で数を表現する方法である。 英語でバイナリ (binary) という。binaryという語には「二進法」の他に「二個一組」「二個単位」といったような語義もある(例: バイナリ空間分割)。.

新しい!!: コンパイラと二進法 · 続きを見る »

予約語

予約語(よやくご、reserved word)とは、プログラミング言語において字句的には識別子(変数名、関数名、クラス名など)としてのルールを満たしているにもかかわらず、識別子にならない字句要素。 似ている言葉としてキーワードがある。多くのプログラミング言語において予約語とキーワードはほぼ同じものを指すため、しばしば混同されるが両者は異なる概念である。キーワードは言語仕様上特別な意味を持った語のことである。キーワードであっても予約語でないこともあるし、その逆もある。たとえば ECMAScriptでは、class は予約されており予約語だが言語で使われておらずキーワードではない(ECMA-262 では、キーワードは予約語の部分集合で、言語で制御構造などの意味を持つ予約語がキーワードである。Java では使っていなくてもキーワードであり、goto もキーワードである)。SQLには予約されたキーワードと予約されていないキーワードがある。例にも出てきたように、個々の規格によっても両者それぞれ微妙に意味が違うこともある。 予約されているのでユーザーは使えない識別子(つまり、使えないだけで、識別子ではある)という意味で(たとえば、処理系で内部的に使う名前と同じであるとか)「予約語」という語を使っている規格もある。この場合キーワードと予約語は別のものである。 FORTRAN、PL/I のように予約語を持たないプログラミング言語も存在する。 また、共通言語基盤(共通言語仕様 (CLS))にしたがって実装されたC#やVB.NETでは予約語を識別子として利用する構文が用意されている。.

新しい!!: コンパイラと予約語 · 続きを見る »

事前コンパイラ

事前コンパイラ (Ahead-Of-Timeコンパイラ、AOTコンパイラ)とは、アプリケーション実行前に事前にコンパイルするコンパイラのこと。主に、Javaのバイトコード、.NET CIL、IBM System/38 や System i の "Technology Independent Machine Interface" コードといったシステムから独立した(プロセス仮想機械)のバイナリである中間言語のコンパイルで使われる言葉である。対義語は、実行時コンパイラ(Just-In-Timeコンパイラ、JITコンパイラ)。 プロセス仮想機械の中間言語のコンパイル方式としては実行時コンパイラ (JITコンパイラ) が性能強化手段としてよく知られている。これは大まかに言えば、実行中に中間言語コードをネイティブの機械語コードにコンパイルするもので、場合によってはアプリケーション性能を低下させることもある。AOTコンパイラは実行時のコンパイルの必要を無くし、ソースコードから中間言語コードを生成した後に、ネイティブの機械語コードも生成してしまう方式である。 Java仮想機械においては、最初の段階から、x86とSPARCの両方でアプリケーションが動くことが重視されていたため、CPUから独立な中間コードの形態でアプリを配布し、実行時にCPUネイティブのコードに変換する手法がとられた。 仮想機械のコンパイルにおいて、JITコンパイラが普及しているため、区別するためAOTコンパイラという言葉が使われるが、C言語やC++など、AOTコンパイラが当たり前の言語では、わざわざAOTをつけずに単にコンパイラと呼ばれることがほとんどである。.

新しい!!: コンパイラと事前コンパイラ · 続きを見る »

低水準言語

低水準言語(low-level programming language: ていすいじゅんげんご、低級言語とも)は、コンピュータ用のプログラミング言語のうち、機械語ないし機械語に近いアセンブリ言語などの言語の総称である。システムの階層構造を考えた場合に、ハードウェア寄りに位置する低レイヤ(低水準)の言語という意味である。対義語は「高水準言語」である。「高級言語」の対は「低級言語」である。 次のような特徴がある。.

新しい!!: コンパイラと低水準言語 · 続きを見る »

形式文法

形式文法(けいしきぶんぽう、Formal Grammar)は、形式的に与えられた(形式体系を参照)文法である。「言語」をその言語における文の集合として与えるものとして、ここでは、(有限の)文字群上の有限長の文字列の(通常無限な)集合が、形式的に記述される。 形式文法にはふたつの捉えかたがある。それは「生成」と「分析」である。#チョムスキー階層の節および単独記事に詳細があるが、両者は対応するので、ある意味では同じものをそれぞれ逆の側から見たものにすぎない。 以下で「文法の規則(構文規則)の集まり」と呼んでいるのは、具体的には、句構造規則#基本モデルにあるようなものである。また終端記号と非終端記号の記事も参照のこと。.

新しい!!: コンパイラと形式文法 · 続きを見る »

マイクロソフト

マイクロソフト()は、アメリカ合衆国ワシントン州に本社を置く、ソフトウェアを開発・販売する会社である。1975年4月4日にビル・ゲイツとポール・アレンらによって設立された。.

新しい!!: コンパイラとマイクロソフト · 続きを見る »

マクロ (コンピュータ用語)

マクロ (macro) は「大きい」「巨大な」といったような意味の語であるが、コンピュータ関係では、アプリケーションソフトウェアなどの操作などといった、プログラミング言語と比較して粒度が大きい操作をまとめて自動化したりする機能を指して良く使われる。マクロを記述するコンピュータ言語をマクロ言語と言う(言語の無いマクロ機能もある)。また、テキスト等の変換を記述する変換言語もマクロと呼ばれる。 この記事と、マクロ言語の記事は、それぞれに書くべき内容と書かれている内容が混乱している。また以下の内容のいくつかは変換言語についてのものである。.

新しい!!: コンパイラとマクロ (コンピュータ用語) · 続きを見る »

マサチューセッツ工科大学

マサチューセッツ工科大学(英語: Massachusetts Institute of Technology)は、アメリカ合衆国マサチューセッツ州ケンブリッジに本部を置く私立工科大学である。1865年に設置された。通称はMIT(エム・アイ・ティー。「ミット」は誤用で主に日本、欧州の極めて一部で用いられる)。 全米屈指のエリート名門校の1つとされ、ノーベル賞受賞者を多数(2014年までの間に1年以上在籍しMITが公式発表したノーベル賞受賞者は81名で、この数はハーバード大学の公式発表受賞者48名を上回る)輩出している。最も古く権威ある世界大学評価機関の英国Quacquarelli Symonds(QS)による世界大学ランキングでは、2012年以来2017年まで、ハーバード大学及びケンブリッジ大学を抑えて6年連続で世界第一位である。 同じくケンブリッジ市にあるハーバード大学とはライバル校であるが、学生達がそれぞれの学校の授業を卒業単位に組み込める単位互換制度(Cross-registration system)が確立されている。このため、ケンブリッジ市は「世界最高の学びのテーマパーク」とさえも称されている。物理学や生物学などの共同研究組織を立ち上げるなど、ハーバード大学との共同研究も盛んである。 MITはランドグラント大学でもある。1865年から1900年の間に約19万4千ドル(これは2008年時点の生活水準でいうところの380万ドルに相当)のグラントを得、また同時期にマサチューセッツ州から更なる約36万ドル(2008年時点の生活水準で換算して700万ドルに相当)の資金を獲得しているD.

新しい!!: コンパイラとマサチューセッツ工科大学 · 続きを見る »

ハードウェア記述言語

ハードウェア記述言語(ハードウェアきじゅつげんご、hardware description language、HDL)は、デジタル回路、特に集積回路を設計するためのコンピュータ言語ないしドメイン固有言語(DSL)である。回路の設計、構成を記述する。処理を検証するための試験(テストベンチ)記述ができ、シミュレーションできる開発環境もある。 プログラミング言語との類似性が見られる機能がある言語もあることから、プログラミング言語の一種などとする誤解が非常に多いが、間違いである。また、プログラマブルロジックコントローラの記述に用いられるラダー言語は別のものと扱われている。.

新しい!!: コンパイラとハードウェア記述言語 · 続きを見る »

バイトコード

バイトコード (bytecode) は、仮想マシンによる実行のために設計された、実行可能なプログラムのバイナリ表現である。ソフトウェアによって処理されるため、大抵は実機の機械語より抽象度の高い中間コードになっている。プログラミング言語の実装において、特定のハードウェアへの依存度を下げ、またインタプリタの実装を容易にするために用いられる。コンパイラの中間コードとして用いられることもある。 バイトコードという名前は命令の構成がバイト指向であること、すなわち命令長がバイト可変長であったり、命令中のフィールドの区切りがバイト区切りに合っているといったことから来ている。特にJavaの場合オペコードが1バイトである。しかし、仮想マシンの機械語をバイトコードと呼ぶことがJavaで広く一般的になったことから、前述のようなバイト指向でなくともバイトコードと呼んでいることも多い。バイト単位でなくビット単位の場合は、ビットコードとも呼ばれる。ワード指向のためにワードコードという語を使っている例も見られる。 バイトコードで記述されたプログラムは通常、バイトコードインタプリタによって解釈・実行される。バイトコードインタプリタは機械語を解釈・実行するCPUとの類似性からバーチャルマシンとも呼ばれる。.

新しい!!: コンパイラとバイトコード · 続きを見る »

ライブラリ

ライブラリ()は、汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたものである。ライブラリと呼ぶ時は、それ単体ではプログラムとして作動させることはできない実行ファイルではない場合がある。ライブラリは他のプログラムに何らかの機能を提供するコードの集まりと言うことができる。ソースコードの場合と、オブジェクトコード、あるいは専用の形式を用いる場合とがある。たとえば、UNIXのライブラリはオブジェクトコードをarと呼ばれるアーカイバでひとまとめにして利用する。図書館()と同様にプログラム(算譜)の書庫であるので、索引方法が重要である。 また、ソフトウェア以外の再利用可能なものの集合について使われることもある。.

新しい!!: コンパイラとライブラリ · 続きを見る »

リロケータブルバイナリ

リロケータブルバイナリとは、リロケータブルな性質を持つバイナリである。 普通、コンピュータの機械語(実行形式)では、実効アドレスの記述には絶対アドレスが用いられる。この場合、プログラムファイルを置くアドレス位置は一箇所に固定され、そのままでは別アドレス位置に置いて実行することはできない。 そこで、あらかじめ絶対アドレスの記述に代えて仮想のアドレス指定をしておき、実行形式のプログラムファイルを生成する際にはじめて絶対アドレスを記述する(このためのソフトウェアを「リンケージエディタ」と呼ぶ)ようにすれば、メモリ空間のどこにでもその実行形式プログラムを置くことができる。 分割コンパイルで出力されるオブジェクトやバイナリライブラリはたいていリロケータブルバイナリである。 CPUやOSの仕様によっては、実行形式の機械語プログラムに絶対アドレスをまったく用いないことにして、そのまま任意のアドレスにロードできるようにしたものもある。そのようなコードを位置独立コードという。.

新しい!!: コンパイラとリロケータブルバイナリ · 続きを見る »

リンケージエディタ

リンケージエディタ(リンカ(linker)、連係編集プログラムとも)とは機械語のプログラムの断片を結合し実行可能なプログラムを作成するプログラムのことである。例として、C言語では、ソースファイルをコンパイルするとオブジェクトファイルが生成される。それに他のオブジェクトファイルやライブラリを結合して1つのプログラムが完成する。この結合(リンク)の際リンケージエディタが使われる。.

新しい!!: コンパイラとリンケージエディタ · 続きを見る »

レジスタ割り付け

レジスタ割り付け(レジスタわりつけ、Register allocation)は、プログラム内の多数の変数を少数のCPUレジスタに多重化するコンパイラ最適化技法のひとつである。その目標は、プログラムの実行速度を最大化すべく、なるべく多くのオペランドをレジスタに保持するようにすることである。レジスタ割り付けは基本的なブロックについて行う場合(ローカルレジスタ割り付け)と関数やプロシージャ全体について行う場合(グローバルレジスタ割り付け)がある。レジスタ割り当てとも呼ぶ。 プログラムは、多数の様々なデータを処理することが多い。しかし、CPUの多くはデータを保持するのに使えるレジスタ数は限られている。機械語のオペランドとしてメモリを指定できる場合でも、なるべくレジスタを使った方が高速化される。従って、処理に必要なデータを RAMとレジスタの間で入れ替えてやる必要がある。この操作を spill(スピル、あふれ)と呼ぶ。 レジスタの spill は、マシンが持っているレジスタ数以上の変数が同時に必要とされる場合に発生する。一般にメモリはレジスタよりも遅いため、spill にはコストがかかる。.

新しい!!: コンパイラとレジスタ割り付け · 続きを見る »

ローダ

ーダ は、プログラムやデータなどを、外部(他のコンピュータや外部記憶装置)からインタフェースなどを通して受け取り、主記憶装置やワークエリアに置く(ロードする)プログラムである。なお、それに加えてプログラムを起動できる状態にし、それを実行するというスタートアップなどと呼ばれる機能まで混同している者も多い。以下は、もっぱらその混同に関する説明である。.

新しい!!: コンパイラとローダ · 続きを見る »

トランスコンパイラ

トランスコンパイラ(他にトランスパイラ、ソース・トゥ・ソースコンパイラ、などとも)は、あるプログラミング言語で書かれたプログラムのソースコードを入力として受け取り、別のプログラミング言語の同等のコードを目的コードとして生成する、ある種のコンパイラである。従来一般に、コンパイラが「比較すると高水準な言語のソースコード」から「比較すると低水準な言語の目的コード」に変換する(「コンパイルする」)ものであったのに対し、トランスコンパイラは同じ程度の(抽象化の)水準のコードに変換する。たとえば、PascalのコードをCのコードへと変換する。自動並列化コンパイラは、しばしば高水準言語の入力からOpenMPのような並列化メタデータやFortranのforall文のような言語構造を変換する。 トランスコンパイルの別の目的は、基本的なプログラミング言語の次期バージョンを使う場合や、APIの後方互換性が壊れた場合などに、レガシーなコードから変換することである。プログラムの実行環境が変わる場合(例えば、Python 2からPython 3に変換する場合や古いAPIから新しいAPIに変換する場合)や、コンパイルによりプログラムのサイズが極端に大きくなったり実行速度が遅くなった場合は、(コンパイラとして見れば、要するに最適化ということだが)リファクタリングを行う。 トランスコンパイラは、元のソースコードの開発やデバッグを簡単に行うことができるよう、元のコードをコメントなどに残す(ことができる)ものもある。また、元のコードから変換した際に構文が大幅に変わった場合は、同等のコードには見えないようなコードに変換されることもある。。元のコードから変換されたソースコードにマッピングを行うデバッグツールもある。。--> トランスコンパイラを主たる実装として開発されている言語の例としては, Coccinelle, CoffeeScript, Dart, Haxe, TypeScript, Emscriptenがある。.

新しい!!: コンパイラとトランスコンパイラ · 続きを見る »

トークン

トークン (token) は、.

新しい!!: コンパイラとトークン · 続きを見る »

トップダウン構文解析

トップダウン構文解析(トップダウンこうぶんかいせき、Top-down parsing)は、構文解析において、構文木を、最上位の非終端記号から始めて、それを順次右辺の記号列へと書き換えていくような手順によって導出する構文解析の戦略である。逆はボトムアップ構文解析。.

新しい!!: コンパイラとトップダウン構文解析 · 続きを見る »

ブートストラップ問題

ブートストラップ問題 (Bootstrap problem) は、コンパイラをコンパイル対象のプログラミング言語で作成した際に、そのコンパイラの最初のコンパイルをどうするかといった場合を典型的な例とする、いわゆる「鶏と卵」の形をしたセルフホスティング環境の問題を指す。これを解決するための方式をブートストラップ方式といい、この問題を何とかして最初の完備した環境を作ることをブートストラッピングという。 名前についてはブートストラップの記事を参照。.

新しい!!: コンパイラとブートストラップ問題 · 続きを見る »

プリプロセッサ

プリプロセッサ (preprocessor) とは、一般にある処理を行うソフトウェアに対して、データ入力やデータ整形などの準備的な処理を行うソフトウェアのことである。特にコンパイラに対して使うことが多く、ここではそれを中心に述べる。 他の分野の例としては、CADやCAEのデータ処理がある。またワープロソフトウェアにおける漢字変換ソフトウェアもプリプロセッサの一例である。.

新しい!!: コンパイラとプリプロセッサ · 続きを見る »

プログラミング言語

プログラミング言語(プログラミングげんご、programming language)とは、コンピュータプログラムを記述するための形式言語である。なお、コンピュータ以外にもプログラマブルなものがあることを考慮するならば、この記事で扱っている内容については、「コンピュータプログラミング言語」(computer programming language)に限定されている。.

新しい!!: コンパイラとプログラミング言語 · 続きを見る »

プロセッサ

プロセッサ は、コンピュータシステムの中で、ソフトウェアプログラムに記述された命令セット(データの転送、計算、加工、制御、管理など)を実行する(=プロセス)ためのハードウェアであり、演算装置、命令や情報を格納するレジスタ、周辺回路などから構成される。内蔵されるある程度の規模の記憶装置までを含めることもある。プロセッサー、プロセサ、プロセッシングユニット、処理装置(しょりそうち)ともいう。「プロセッサ」は処理装置の総称で、システムの中心的な処理を担うものを「CPU()」(この呼称はマイクロプロセッサより古くからある)、集積回路に実装したものをマイクロプロセッサ、またメーカーによっては(モトローラなど)「MPU()」と呼んでいる。 プロセッサの構成要素の分類として、比較的古い分類としては、演算装置と制御装置に分けることがある。また、理論的な議論では、厳密には記憶装置であるレジスタすなわち論理回路の用語で言うところの順序回路の部分を除いた、組み合わせ論理の部分のみを指すことがある(状態機械モデルと相性が悪い)。の分類としては、実行すべき命令を決め、全体を制御するユニットと、命令を実行する実行ユニットとに分けることがある。.

新しい!!: コンパイラとプロセッサ · 続きを見る »

パーサジェネレータ

パーサジェネレータ(parser generator)は、構文解析器を作成するプログラムである。.

新しい!!: コンパイラとパーサジェネレータ · 続きを見る »

ビルド (ソフトウェア)

フトウェアのビルド(build)は、ソースコードファイルを独立したソフトウェア生成物に変換するコンピュータ上で実行されるプロセス、またはその結果を指す。ビルドにおいて最も重要なのはコンパイルプロセスであり、ソースコードファイルを実行ファイルに変換する。 単純なプログラムでは、単一のファイルをコンパイルするだけで済むが、複雑なソフトウェアではソースコードは多数のファイルで構成されており、異なった組み合わせ方をすることで異なったバージョンを生成できる。 コンピュータプログラムのビルドは、一般にビルドツールと呼ばれるプログラムを使い、他のプログラムを制御・統合して行う。ビルドツールの例としては、make、ant、maven、SConsなどがある。ビルドユーティリティは、各種ファイル群を正しい順序でコンパイルしリンクする必要がある。また、開発時には何度もビルドを繰り返すが、前回のビルドから何も変更されていないファイルはコンパイルする必要がない(ただし、ヘッダファイルなどの依存関係も考慮する必要がある)。洗練されたビルドユーティリティは無駄な再コンパイルをしないようにして、ビルドに要する時間を短縮している。Subversionなどのバージョン管理システムはビルドユーティリティの機能を内蔵している。さらに複雑なプロセスになると、ビルド中に他のプログラムを使ってコードやデータを生成することもある。.

新しい!!: コンパイラとビルド (ソフトウェア) · 続きを見る »

データ型

データ型(データがた、)とは、(コンピュータにおける)データ(値)の種類に関する分類である。データタイプとも。 具体的にいうと、たとえば 0, 1, 2, -42 といったような値は整数型であり、"foo", "Hello" といったような値は文字列型である。プログラミングなどにおいて、まずデータオブジェクトや関数などの「値」について、またさらに、それらに関連付け(束縛)される変数や定数、リテラル、それらを組合せる演算子、さらにそれらからなる式といった構文上の要素の型が、データ型の議論の対象となる。.

新しい!!: コンパイラとデータ型 · 続きを見る »

データフロー解析

データフロー解析(Data-flow analysis)は、プログラム内の様々な位置で、取りうる値の集合に関する情報を収集する技法である。制御フローグラフ (CFG) を使って変数の値が伝播するかどうかなどの情報を集め、利用する。このようにして集められた情報はコンパイラが最適化に利用する。データフロー解析の基本は到達定義 (reaching definition) である。 あるプログラムのデータフロー解析を行う単純な方法は、制御フローグラフの各ノードについてデータフロー方程式を設定し、全体として安定した状態、すなわち不動点に到達するまで、それらの式を繰り返し計算していく。完了することを保証するためには、不動点データフロー解析に基づくデータフロー方程式が必要である。すなわち、各式のローカルな更新は単調である。この技法の基本はゲイリー・キルドールが海軍大学院大学で教えていたころに開発したものである。.

新しい!!: コンパイラとデータフロー解析 · 続きを見る »

デッドコード削除

デッドコード削除(デッドコードさくじょ。英: dead code elimination(デッドコード取り除き))は、コンピュータ・プログラムの最適化などの目的で行われるプログラムの変形のひとつで、到達不能コードや冗長なコードなどといった「デッドコード」を削除する操作である。効果としては、最適化として見た場合、コードサイズの削減(いわゆるフットプリントの縮小)や、それに伴うキャッシュの利用効率の向上などによる高速化も期待できるかもしれない。.

新しい!!: コンパイラとデッドコード削除 · 続きを見る »

フロントエンド

フロントエンド(front-end)とバックエンド(back-end)は、プロセスの最初と最後の工程を指す一般的用語である。フロントエンドは各種入力をユーザーから収集し、バックエンドが使える仕様に合うようにそれを加工する。フロントエンドとバックエンドの結合部はインタフェースと呼ばれる。.

新しい!!: コンパイラとフロントエンド · 続きを見る »

ニクラウス・ヴィルト

ニクラウス・ヴィルト (Niklaus Wirth, 1934年2月15日 -)はスイスの計算機科学者。プログラミング言語Pascal、Modula-2などの開発や、ソフトウェア工学分野の開拓的研究で知られる。.

新しい!!: コンパイラとニクラウス・ヴィルト · 続きを見る »

制御フローグラフ

制御フローグラフ(せいぎょフローグラフ、Control Flow Graph, CFG)は、プログラムを実行したときに通る可能性のある全経路をグラフで表したものである。この場合、ノードは基本ブロック(すなわち、分岐を全く含まない逐次的コード列であって、途中に分岐先もない)を表し、ノードとノードをつなぐ有向エッジは、あるブロックから別ブロックへのジャンプを意味する。一般に、グラフ全体の入口となる入口ブロックと、出口となる出口ブロックがある。 CFGはコンパイラ最適化や静的コード解析ツールでよく使われる。 最適化において利用されるグラフの属性として、到達可能性(reachability)がある。あるブロックまたは部分グラフが、入口ブロックを含む部分グラフと連結していない場合、そのブロックは決して実行されることはなく、いわゆる到達不能コードであって、容易に削除可能である。出口ブロックが入口ブロックから到達不能な場合、無限ループとなっている(あらゆる無限ループを検出できるわけではない。停止性問題を参照のこと)。プログラマが明示的に到達できないコードや無限ループを書かなくても、そのような状況になることはある。例えば、定数伝播や定数畳み込みといった最適化を行った後に分岐スレッディングを行うと、元々は別々だった基本ブロックが1つにまとめられることがあり、エッジがCFGから除去され、グラフの一部が連結されなくなることがある。.

新しい!!: コンパイラと制御フローグラフ · 続きを見る »

アルフレッド・エイホ

アルフレッド・V・エイホ(Alfred Vaino Aho、1941年8月9日 - )は、カナダ出身の計算機科学者。1995年からニューヨークのコロンビア大学で教授を務めており、2003年には同大学同窓会から Great Teacher Award を授与された。.

新しい!!: コンパイラとアルフレッド・エイホ · 続きを見る »

アーキテクチャ

アーキテクチャ(architecture)は、英語で「建築学」、「建築術」、「構造」を意味する語である。 分野によってはアーキテクチュアともいうが、英語での発音は であり、アーキテクチャのほうが近い。.

新しい!!: コンパイラとアーキテクチャ · 続きを見る »

アセンブリ言語

モトローラ MC6800 のアセンブリ言語のソースコード アセンブリ言語(アセンブリげんご、英: assembly language)とは、コンピュータ、マイクロコントローラ、その他のプログラム可能な機器を動作させるための機械語を人間にわかりやすい形で記述する、代表的な低水準言語である。なお、英語の assembly とは「組立」という意味である。.

新しい!!: コンパイラとアセンブリ言語 · 続きを見る »

インライン展開

インライン展開(inline expansion または inlining)とは、コンパイラによる最適化手法の1つで、関数を呼び出す側に呼び出される関数のコードを展開し、関数への制御転送をしないようにする手法。これにより関数呼び出しに伴うオーバーヘッドを削減する。特に小さくて頻繁に呼ばれる関数では効果的であり、呼び出し側にそのコードを展開することで定数畳み込みなどのさらなる最適化を施せる可能性が生じる。問題点はバイナリコードが一般に肥大化する結果を招く点であり、参照の局所性を損なうほどだったり、リソースの限界を超えると性能がかえって悪化することになる。 関数型言語の世界では、インライン展開をβ変換とも呼び、関数型言語の理論的基盤となっているラムダ計算の用語としてよく使われる。.

新しい!!: コンパイラとインライン展開 · 続きを見る »

インテル

インテル(英:Intel Corporation)は、アメリカ合衆国カリフォルニア州に本社を置く半導体素子メーカーである。 社名の由来はIntegrated Electronics(集積されたエレクトロニクス)の意味である。.

新しい!!: コンパイラとインテル · 続きを見る »

インタプリタ

インタプリタ(interpreter)とは、プログラミング言語で書かれたソースコードないし中間表現を逐次解釈しながらするプログラムのこと。.

新しい!!: コンパイラとインタプリタ · 続きを見る »

オブジェクトファイル

ブジェクトファイル またはオブジェクトコード とは、コンパイラがソースコードを処理した結果生成される、コード生成の結果であるバイナリコードを含む中間的なデータ表現のファイルである。中身は、機械語バイナリとそれに付随するシンボルテーブルやリロケーションテーブルといった付加情報であり、さらにデバッグ支援情報や近年はリンク時最適化等のための高度な情報が含まれる場合もある。オブジェクトファイル群をリンクすることによって最終的な実行ファイルやライブラリが作成される。オブジェクトファイルのほとんどは機械語である(コンピュータのCPUが直接実行できるコード)。オブジェクトファイルフォーマットはコンパイラやアセンブラが生成するオブジェクトファイルのファイルフォーマットである。.

新しい!!: コンパイラとオブジェクトファイル · 続きを見る »

カーネギーメロン大学

ーネギーメロン大学(英語: Carnegie Mellon University)は、ペンシルベニア州ピッツバーグに本部を置くアメリカ合衆国屈指の名門私立研究大学である。1900年に設立され、略称はCMU。大学のモットーは、"My heart is in the work (私の心は仕事の中にある)"(創立者アンドリュー・カーネギー)。 美術・音楽・文学・科学の最終形は、この四つが一つに成っている形である。アンドリュー・カーネギーのこの考えに沿って、アートとテクノロジーのバランスと融合を重んじた高等教育をCMUは現在も精力的に実践していると言える。日本では理工系が強い大学で知られ、CMUの名はマサチューセッツ工科大学(MIT)、カリフォルニア工科大学(CalTech)とともにアメリカの名門工科大学の御三家の一つとしてあまりにも有名。 その一方で藝術、人文・社会科学、公共政策学・情報学、経営学(MBA)の分野においても、常に全米あるいは世界のトップクラスにランキングされているという事実を認識することで、MITやCalTechのように一概に工科大学とは言えない、総合大学としてのCMUの全体像を正しく掴むことができる。著名な賞を受賞したCMU関係者の数も、この全体像を反映した結果となっている。 ノーベル賞20名、チューリング賞12名、エミー賞52名、アカデミー賞10名、トニー賞44名、等々。.

新しい!!: コンパイラとカーネギーメロン大学 · 続きを見る »

クロスコンパイラ

ンパイラ(cross compiler)は、コンパイラが動作している以外のプラットフォーム向けに実行ファイルを生成する機能を持つコンパイラである。クロスコンパイラは主に組み込みシステム向けのコンパイラや、マルチプラットフォーム対応のコンパイラとして使われる。 必要最小限のメモリしか搭載していないことが多いマイクロコントローラを使った組み込みシステムなど、実行ファイルを動作させたいプラットフォームがコンパイル環境としては不適切な場合にはクロスコンパイラは必須である。 システムが複数のプラットフォームをサポートする場合に、準仮想化のためのツールとしてクロスコンパイラを利用することが一般化しつつある。.

新しい!!: コンパイラとクロスコンパイラ · 続きを見る »

グレース・ホッパー

レース・マレー・ホッパー (Grace Murray Hopper, 1906年12月9日 - 1992年1月1日) は、アメリカ海軍の軍人かつ計算機科学者。最終階級は准将。ハーバード マークIの最初のプログラマーの一人であり、プログラミング言語COBOLを開発した。愛称はアメージング・グレース。.

新しい!!: コンパイラとグレース・ホッパー · 続きを見る »

コンパイラジェネレータ

ンパイラジェネレータ(compiler generator)は、コンパイラを生成するプログラムである。.

新しい!!: コンパイラとコンパイラジェネレータ · 続きを見る »

コンパイラ最適化

ンパイラ最適化(こんぱいらさいてきか、Compiler optimization)の記事では、コンピュータ・プログラムの最適化に関する話題のうち、もっぱらコンパイラに関係するものに関して説明する。最も一般的な要求はプログラムの実行時間を最小化することであり、その次に使用するメモリ量を最小化することである。また、携帯可能なコンピュータが増えるにつれて、消費電力を最小化するという最適化も生まれてきた。 一部のコード最適化問題はNP完全問題であることが示されている。実際には、プログラマがコンパイラによる最適化の完了を待てる時間の上限なども考慮してコンパイラ最適化を実装する(最適化はCPU時間とメモリを多大に使用する)。かつては、コンピュータのメモリ実装量も実行できる最適化を制限する要因だった。 コンパイラメーカによっては、「コンパイラの最適化の能力が売り上げや評判に大きく影響する」と信じている場合があり、そういう信念に従って「最適化コンパイラ」と銘打つことがある。少なくとも、同程度にバグが無いコンパイラ同士であれば、という前提の範囲内なら、最適化の能力が高いほうが魅力的と言えるであろう。.

新しい!!: コンパイラとコンパイラ最適化 · 続きを見る »

コールグラフ

ールグラフ (マルチグラフとも呼ばれる) とは、コンピュータプログラムのサブルーチン同士の呼び出し関係を表現した有向グラフである。具体的には、各ノードが手続きを表現し、各エッジ(f,g)は手続きfが手続きgを呼び出すことを示す。従って、循環したグラフは再帰的な関数呼び出しを示す。 コールグラフはプログラムの初歩的な解析の結果であり、プログラムを人間が可読なものにするため、あるいはたとえば手続き間の変数の追跡を行う解析といった発展的な解析のための基礎として用いることができる。コールグラフの簡単な利用方法は、一度も呼び出されない関数を見つけることである。 コールグラフは 動的でも静的でもありうる。動的なコールグラフはプログラムの実行結果の記録、たとえばプロファイラの出力である。従って、動的なコールグラフは正確であるが、プログラムの一度の実行結果を記述できるのみである。正確な静的コールグラフは非決定論的であり、静的なコールグラフ抽出の アルゴリズムは一般的に過剰な見積もりに基づいている。つまり、実際に生じる各呼び出し関係もグラフ内に表現されるが、プログラムの実際の動作では一度も生じないいくつかの呼び出し関係も表現される。 コールグラフは正確さによって異なる形で表現することができる。より正確なコールグラフは長い計算時間と大きなメモリ消費量を代償として、たとえばプロファイラの出力結果などの形式により、実際のプログラムの振る舞いより正確に見積もることができるよう表現することができる。最も正確なコールグラフは「コンテキストを理解した」コールグラフ、すなわち各手続きについて手続きが呼び出されるコールスタックごとに別々のノードを持つようにしたものである。完全に「コンテキストを理解した」コールグラフは生成に膨大なメモリを消費するが、計算は簡単に行うことができる。大規模なプログラムでは計算時間がかかりすぎるため、完全に「コンテキストを理解した」コールグラフを静的に求めることはできない。最も正確さが低いコールグラフは「コンテキストを理解しない」ものであり、各手続きについてノードを一つしか持たない。 動的なディスパッチを備えるJavaやC++などの言語では、静的なコールグラフを正確に求めるためにはエイリアス解析の結果を必要とする。逆に言えば、正確なエイリアスを求めるためにはコールグラフが必要である。静的な解析システムは二つを同時に求めることで、この相互に相手を必要とする問題(無限後退)を解決する。 コールグラフという用語はコンパイラやバイナリ変換のコミュニティでよく用いられる。.

新しい!!: コンパイラとコールグラフ · 続きを見る »

コード生成

ード生成(Code Generation)とは、コンパイルの最終段階であり、ソースコードの意味が実現された目的コードを生成する過程である。「何らかの目的コード」が具体的には、機械語である場合もあれば、アセンブリ言語である場合もあれば、バイトコードや、場合によっては「ソースコード側が比較すれば高水準であるのに対して低水準な側であると言える言語(例えばC言語など)」ということもある。同程度の水準の言語間の変換を指すトランスパイルなどという語も近年はできた。.

新しい!!: コンパイラとコード生成 · 続きを見る »

シリコングラフィックス

リコングラフィックス(Silicon Graphics International Corp.、略称:SGI、NASDAQ:)は、業務用コンピュータの開発・製造・販売を行うアメリカの企業である。本拠地はカリフォルニア州マウンテンビューに置かれていたが、2009年にサンノゼが本社所在地となった。 元々は、1982年にSilicon Graphics, Inc.として設立された。 コンピュータグラフィックスに特化した最先端の製品を開発し続け、コンピュータグラフィックス全般に絶大な影響を与えた企業である。同社のCGワークステーションは、1990年代までは世界最高の性能を堅持していた。特に、大規模な商業映画におけるCG制作でデファクトスタンダードとして扱われていたことは有名である。現在も世界中のIT端末で使われているOpenGLは、同社のCGワークステーション向けに開発されたIRISGLがオープン化されたAPIである。 2000年代に入り画像処理分野にも安価で十分な性能を持つx86アーキテクチャが普及すると、高価で大して性能面の優位性もない上に互換性もない自社専用アーキテクチャの開発を停止した。x86アーキテクチャへの転換により画像処理分野における優位性が失われたため、科学技術計算用の大型計算機を中心としたビジネスに移行した。 2009年4月1日、連邦倒産法第11章の適用を申請して倒産。同日、Rackable Systems社による事業買収の合意が発表された。5月8日にRackable Systems社による買収が完了、5月18日にRackable Systems社は社名を「Silicon Graphics International Corp.(SGI)」へと変更した(NASDAQのティッカーシンボルもRACKからSGIに変更)。 2016年11月1日、ヒューレット・パッカード・エンタープライズ (HPE) による買収が完了し、公開会社としてのSGIは廃止された。買収金額は2億7500万ドルであった。 日本法人に日本SGIがある。2001年に日本SGIがNECの出資を受けてSGIより独立したが、2011年に再度、SGIの100%子会社となった。2016年にはHPEの傘下となった。.

新しい!!: コンパイラとシリコングラフィックス · 続きを見る »

シンボルテーブル

ンボルテーブル(Symbol table)は、コンパイラやインタプリタなどのようなコンピュータプログラミング言語処理系などのようなプログラムで使われるデータ構造であり、プログラムのソースコード内の各識別子(名前)と、それぞれの内容(データ型、スコープレベル、位置など)となるデータなどといった、「名前」→「中身」というような情報のテーブルである。.

新しい!!: コンパイラとシンボルテーブル · 続きを見る »

ジョン・バッカス

ョン・ワーナー・バッカス(John Warner Backus, 1924年12月3日 - 2007年3月17日)は、アメリカ合衆国の数学者。初期の高水準プログラミング言語 (FORTRAN) の発明者、(形式言語の文法の定義に汎用的に用いられる)バッカス・ナウア記法の発明者、また (Function-level Programming) の提唱者でもある。.

新しい!!: コンパイラとジョン・バッカス · 続きを見る »

スコープ

プログラミングでのスコープ(scope, 可視範囲)とは、ある変数名や関数名といった名前を参照できる範囲のこと。ある範囲の外に置いた変数等は、通常、その名前だけでは参照できない。このときこれらの変数はスコープ外である、「見えない」といわれる。 プログラミングでは、予期しない誤作動を避けるためにも、それぞれの作業段階で必要のない名前はできるだけ参照されないようにすることが望ましい(特に、大域変数は便利な場合もあるが、危険でもある)。たとえば、CERT C コーディングスタンダードには、「変数と関数の有効範囲を最小限にする」(DCL19-C.)というレコメンデーションがある。.

新しい!!: コンパイラとスコープ · 続きを見る »

セルフホスティング

ルフホスティング(Self-hosting)は、ツール群やオペレーティングシステムの一部であるプログラムを使って、同じプログラムの新しいバージョンを作ることを指す。例えば、コンパイラでそのコンパイラ自身のソースコードをコンパイルすることなどを意味する。セルフホスティング・ソフトウェアはパーソナルコンピュータや大型のシステムでよく使われる。その他にセルフホスティングとなっている典型例としては、カーネル、アセンブラ、シェルなどがある。 全くソフトウェアが書かれていない新しいシステムの場合、ソフトウェアは別のセルフホスティングシステム上で開発され、ターゲットの新システムが読み取れる記憶装置に格納される。この形態の開発は、ターゲットシステムがある程度の信頼性を持って自身の開発に利用できるようになるまで続けられる。例えば、Linuxオペレーティングシステムの開発は、当初MINIXシステム上で行われた。新たなシステムで使うソフトウェアを、このような別のホストシステムを使わずに開発することは非常に珍しく、多くの場合不可能である。 プログラミング言語にも、セルフホスティング方式、すなわちコンパイラがその言語で書かれているものがある。新規のプログラミング言語の最初のコンパイラは、別の言語(場合によっては機械語)で書かれるか、ブートストラップ方式で開発される。セルフホスティング言語としては、LISP、Forth、Pascal、Delphi、C言語、Modula-2、Oberon、Smalltalk、OCaml、FreeBASIC、Haskell などがある。.

新しい!!: コンパイラとセルフホスティング · 続きを見る »

セシィ–ウルマン法

ィ–ウルマン法(英: Sethi–Ullman algorithm)とは、コンパイラにおいて数式に対応したコードを生成する際に、必要な命令数やレジスタ数を最小にするアルゴリズムである。ただし前提条件として、数式内の各演算に交換法則と結合法則が成り立たなければならない。分配法則は成り立たなくてもよい。交換法則や結合法則が成り立たない場合もこのアルゴリズムを適用可能だが、その場合、数式の変形はできない。.

新しい!!: コンパイラとセシィ–ウルマン法 · 続きを見る »

ソースコード

青で示されているのが有効なコードである。 ソースコード(source code)とは、コンピュータプログラミング言語で書かれた、コンピュータプログラムである文字列(テキストないしテキストファイル)のことである。.

新しい!!: コンパイラとソースコード · 続きを見る »

サン・マイクロシステムズ

ン・マイクロシステムズ本社 サン・マイクロシステムズ(Sun Microsystems)は、アメリカ合衆国カリフォルニア州サンタクララに本社を置いていたコンピュータの製造・ソフトウェア開発・ITサービス企業である。2010年1月27日にオラクルにより吸収合併され、独立企業・法人としては消滅した。.

新しい!!: コンパイラとサン・マイクロシステムズ · 続きを見る »

再帰下降構文解析

再帰下降構文解析(さいきかこうこうぶんかいせき、Recursive Descent Parsing)は、相互再帰型の手続き(あるいは再帰的でない同等の手続き)で構成されるLL法のトップダウン構文解析であり、各プロシージャが文法の各生成規則を実装することが多い。従って、生成されるプログラムの構造はほぼ正確にその文法を反映したものとなる。そのような実装の構文解析器を再帰下降パーサ(Recursive Descent Parser)と呼ぶ。.

新しい!!: コンパイラと再帰下降構文解析 · 続きを見る »

共通中間言語

共通中間言語(きょうつうちゅうかんげんご、Common Intermediate Language、略称: CIL("sil" や "kil" と発音される))は、共通言語基盤 (Common Language Infrastructure、CLI) で定義された最も低水準な人間が解読可能なプログラミング言語であり、.NET FrameworkやMonoにより使用される。CLI互換な実行環境をターゲットとしている言語はCILにコンパイルされる。そのCILはバイトコードスタイルフォーマットであるオブジェクトコードにより組み立てられている。CILはオブジェクト指向なアセンブリ言語であり、完全なスタックベースである。そのバイトコードはネイティブコードに翻訳されるか、仮想機械により実行される。.NET言語がベータリリースである間、CILはMicrosoft Intermediate Language (MSIL) と呼ばれていた。C#およびCLIの標準化により、現在ではバイトコードは公式にCILと呼ばれる。.

新しい!!: コンパイラと共通中間言語 · 続きを見る »

動的リンク

動的リンク(どうてきりんく)とは二つの意味がある。.

新しい!!: コンパイラと動的リンク · 続きを見る »

動的プログラミング言語

動的プログラミング言語(dynamic programming language)は、コンピュータ・プログラミング言語において、一般にコンパイルなどの準備段階に済まされることが多いことを、準備時ではなく実行時に行うプログラミング言語処理系(の言語)である。本来は実装(処理系)のことを指すべきであるが、一般にその言語を指して議論されることが多い。もっぱら高水準言語が多い。動的言語(dynamic language)とも。例えば、型システムによる型チェックや、値の型変換、名前束縛などを、コンパイルなどの実行準備時ではなく実行時に行う。そういった「動的さ」により、コードの追加やオブジェクトや定義の拡張や型システムの変更によるプログラムの拡張、といったことが行いやすい、ということが利点とされる。これらの動作は静的な処理系でも手間はかかるがエミュレート可能である(例えばJavaのJDK/JREでも、クラスローダーを活用すれば可能である)。一方、動的言語ではそういったことが、直接的にサポートされる。 動的言語と動的型付けは同じ概念ではないし、全ての動的言語が必ずしも動的型付き言語というわけではない。たとえばSmalltalk環境の一つであるStrongtalkやGradualtalkは動的な言語にも拘わらず静的型検査が可能となっている。しかし多くの動的言語は動的型付き言語である。.

新しい!!: コンパイラと動的プログラミング言語 · 続きを見る »

動詞

動詞(どうし、英: verb)とは、品詞の一つで、主に動作や状態を表し、項として主語や目的語などの名詞句をとる語である。時制がある言語では、一般に動詞が時制を示す。.

新しい!!: コンパイラと動詞 · 続きを見る »

C言語

C言語(シーげんご)は、1972年にAT&Tベル研究所のデニス・リッチーが主体となって開発したプログラミング言語である。英語圏では単に C と呼んでおり、日本でも文書や文脈によっては同様に C と呼ぶことがある。.

新しい!!: コンパイラとC言語 · 続きを見る »

COBOL

COBOL(コボル)は、1959年に事務処理用に開発されたプログラミング言語である。名前は「Common Business Oriented Language」(共通事務処理用言語)に由来する。.

新しい!!: コンパイラとCOBOL · 続きを見る »

Common Lisp

Common Lisp(コモン・リスプ)は、コンピュータ・プログラミング言語 Lispの標準(の、ひとつ)であり、Lisp方言のひとつである。Common Lispの略称はCL(ごくまれにclispとも。なおCLISPという実装が実在するので混同回避のためあまり用いられない)。規格はANSIによる ANSI INCITS X3.226-1994 (R2004) 。仕様を指すこともあれば、実装を指すこともある。いくつかの、フリーソフトウェアの定義に合致したライセンスによりライセンスされている実装や、オープンソースの定義に合致したライセンスによりライセンスされている実装や、プロプライエタリなライセンスによりライセンスされている実装がある。 Lispの基本的な特徴の他、いくつかのプログラミングパラダイムのLispへの取り込みについて標準を提供しているという、マルチパラダイムプログラミング言語という面がある。.

新しい!!: コンパイラとCommon Lisp · 続きを見る »

CPU

Intel Core 2 Duo E6600) CPU(シーピーユー、Central Processing Unit)、中央処理装置(ちゅうおうしょりそうち)は、コンピュータにおける中心的な処理装置(プロセッサ)。 「CPU」と「プロセッサ」と「マイクロプロセッサ」という語は、ほぼ同義語として使われる場合も多いが、厳密には以下に述べるように若干の範囲の違いがある。大規模集積回路(LSI)の発達により1個ないしごく少数のチップに全機能が集積されたマイクロプロセッサが誕生する以前は、多数の(小規模)集積回路(さらにそれ以前はディスクリート)から成る巨大な電子回路がプロセッサであり、CPUであった。大型汎用機を指す「メインフレーム」という語は、もともとは多数の架(フレーム)から成る大型汎用機システムにおいてCPUの収まる主要部(メイン)、という所から来ている。また、パーソナルコンピュータ全体をシステムとして見た時、例えば電源部が制御用に内蔵するワンチップマイコン(マイクロコントローラ)は、システム全体として見た場合には「CPU」ではない。.

新しい!!: コンパイラとCPU · 続きを見る »

編纂

編纂、編さん(へんさん)とは、図書館情報学において、著作の定義にもちいる用語の一つである。多くの文献をあつめ、それに基づいて、新しく記述した書物に関して用いる用語であり、著作者の年譜や著作目録の作成などに用いる。 既発表の著作を配列したもの(文庫本で短編小説集をつくるなど)は、編集とよんで、編纂と区別する。 図書目録作成時には、編纂者は著者と同様に標目を立てるが、編集者は著者標目には立てないのが原則である。 Category:出版 Category:書物 Category:図書館情報学.

新しい!!: コンパイラと編纂 · 続きを見る »

編集

編集(へんしゅう)とは、書物(書籍や雑誌)・文章・映画・ラジオ番組・テレビ番組・動画などの仕分け素材を、取捨選択、構成、配置、関連づけ、調整、などすることである。 古くから「編集」「編輯」「編緝」などの表記があり、特に戦前は「編輯」の表記が多かったが、当用漢字制定後に「編集」に統一された。当用漢字に「輯」の字がなく、似たような意味で同音の字である「集」(「輯」の新字体ではなく、全く別の字)に置き換えたためである(これを「俗用書換え」という)。なお書物の編集においては、全集や辞典・百科事典など大部なものを対象とするときは「編纂(へんさん)」、また歴史書・教科書などを対象とするときは「編修(へんしゅう)」の表記を使うことがある。 転じて、編集をやり直すことや、既存のものに変更を加える(改訂)ことをも編集ということもある。特にコンピュータ関連では、既存のファイルの一部(あるいは全部)を変更することを「ファイルを編集する」と言い表す。ウィキペディア内で散見される「記事(あるいはページ)を編集」という表現も、多くはこの意味である。.

新しい!!: コンパイラと編集 · 続きを見る »

組み込みシステム

組み込みシステム(くみこみシステム、英: Embedded system)とは、特定の機能を実現するために家電製品や機械等に組み込まれるコンピュータシステムのこと。.

新しい!!: コンパイラと組み込みシステム · 続きを見る »

EBNF

EBNF(Extended Backus–Naur Form)とは、文脈自由文法を表現するメタ文法記法であり、コンピュータのプログラミング言語や形式言語の形式的表現として使われる。バッカス・ナウア記法 (BNF) の拡張であり、拡張バッカス・ナウア記法とも呼ばれるが、ABNF(Augmented Backus-Naur Form)も同じ訳語となるため、区別するためあえて EBNF としている。 ニクラウス・ヴィルトが最初に開発した。EBNF の標準化されたものとして ISO-14977 などがある。.

新しい!!: コンパイラとEBNF · 続きを見る »

EDSAC

EDSAC EDSAC(エドサック、Electronic Delay Storage Automatic Calculator)は、初期のイギリスのコンピュータのひとつ。このマシンはジョン・フォン・ノイマンがまとめたEDVACレポート(:en:First Draft of a Report on the EDVAC)に刺激され、モーリス・ウィルクスとケンブリッジ大学の数学研究所のチームが開発した。EDSACは、世界初の実用的なプログラム内蔵方式の電子計算機であるが、プログラム内蔵方式の世界初の稼働したマシンではない。 プロジェクトは J. Lyons & Co.

新しい!!: コンパイラとEDSAC · 続きを見る »

Eval

eval(イーバル)はいくつかのプログラミング言語が持つ、文字列を式として評価する関数、または複数の文をプログラム中のあるコンテキストで実行するサブルーチンである。 evalの類の機能はコンパイラ言語よりもインタプリタ言語でより一般的である。なぜならコンパイラ言語でこのような機能を実現するには、プログラム自体に言語処理系や(変数名などの)実行時情報を埋め込む必要があるからである。evalに近い機能を実現しているコンパイラ言語も存在する。.

新しい!!: コンパイラとEval · 続きを見る »

計算機科学

計算機科学(けいさんきかがく、computer science、コンピュータ科学)とは、情報と計算の理論的基礎、及びそのコンピュータ上への実装と応用に関する研究分野である。計算機科学には様々な下位領域がある。コンピュータグラフィックスのように特定の処理に集中する領域もあれば、計算理論のように数学的な理論に関する領域もある。またある領域は計算の実装を試みることに集中している。例えば、プログラミング言語理論は計算を記述する手法に関する学問領域であり、プログラミングは特定のプログラミング言語を使って問題を解決する領域である。.

新しい!!: コンパイラと計算機科学 · 続きを見る »

高水準言語

水準言語(high-level programming language: こうすいじゅんげんご、高級言語とも)とは、記述の抽象度が高いプログラミング言語のことである。対義語は機械語やアセンブリ言語を指す「低水準言語」である。「高級言語」の対は「低級言語」である。.

新しい!!: コンパイラと高水準言語 · 続きを見る »

識別子

識別子(しきべつし、identifier)とは、ある実体の集合の中で、特定の元を他の元から曖昧さ無く区別することを可能とする、その実体に関連する属性の集合のことをいう。ほぼすべての情報処理システムで何らかの識別子が使われており、識別子を利用することで機械的な処理が可能になる。.

新しい!!: コンパイラと識別子 · 続きを見る »

麻宮騎亜

麻宮 騎亜(あさみや きあ、1963年3月9日 - )は、日本の漫画家、アニメーター。本名及びアニメーターでの名義は菊池 通隆(きくち みちたか)。岩手県北上市出身。.

新しい!!: コンパイラと麻宮騎亜 · 続きを見る »

逆ポーランド記法

逆ポーランド記法(ぎゃくポーランドきほう、)は、数式やプログラムの記法の一種。演算子を被演算子の後にすることから、後置記法 (Postfix Notation) とも言う。 その他の記法として、演算子を被演算子の中間に記述する中置記法、前に記述する前置記法(ポーランド記法)がある。 逆ポーランド記法でも、演算子早出し逆ポーランド記法 ERP(early-operator reverse Polish notation)と、演算子遅出し(late-operator)逆ポーランド記法 LRP の分類があり、特に演算子早出し逆ポーランド記法は「その記号の配列順を些かも崩さずに和文に移せる」という特徴がある。 名称の由来は、演算子と被演算子の順序がポーランド記法の逆になっていることによる(「ポーランド記法」自体の由来についてはポーランド記法の記事を参照のこと)。.

新しい!!: コンパイラと逆ポーランド記法 · 続きを見る »

逆コンパイラ

逆コンパイラ(ぎゃくこんぱいら、Decompiler)とは機械語で記述されたオブジェクトコードを解析し、人間にわかりやすいソースコードを作成するプログラムである。.

新しい!!: コンパイラと逆コンパイラ · 続きを見る »

FORTRAN

FORTRAN(フォートラン)は、1954年にIBMのジョン・バッカスによって考案された、コンピューターにおいて広く使われた世界最初の高級言語である。.

新しい!!: コンパイラとFORTRAN · 続きを見る »

GNUコンパイラコレクション

GNU Compiler Collection(グニューコンパイラコレクション)は、GNUのコンパイラ群である。略称は「GCC(ジーシーシー)」。GNUツールチェーンの中核コンポーネント。.

新しい!!: コンパイラとGNUコンパイラコレクション · 続きを見る »

IBM

IBM(アイビーエム、正式社名: International Business Machines Corporation)は、民間法人や公的機関を対象とするコンピュータ関連製品およびサービスを提供する企業である。本社はアメリカ合衆国ニューヨーク州アーモンクに所在する。世界170カ国以上で事業を展開している。.

新しい!!: コンパイラとIBM · 続きを見る »

Java

Java(ジャバ)は、狭義ではプログラミング言語Javaを指す。広義では言語仕様以外にも、仕様が与えられているJavaクラスライブラリやJava仮想マシン、さらにはJDKやJREなどの公式のものをはじめとする、場合によってはサードパーティのものなどを含め曖昧にJavaプラットフォームと総称されるようなものなどのエコシステムなどを指すこともある。構文についてはJavaの文法の記事を参照。.

新しい!!: コンパイラとJava · 続きを見る »

Lex

Lex(レック、レックス)はレキシカルアナライザ(字句解析プログラム、字句解析器)を生成するプログラムである。コンパイラの作成のためにパーサジェネレータのyaccとともに使用されることも多い。Lexはエリック・シュミットとマイク・レスクによって書かれunixにおける標準のレキシカルアナライザとなっており、POSIX標準ともなっている。Lexと同等の機能を有し性能が改善されているFlex(英語版)がある。.

新しい!!: コンパイラとLex · 続きを見る »

LISP

LISPは、プログラミング言語である。 によって記述される。-->前置記法などが特徴である。 1958年にはじめて設計されたLISPは、現在広範囲に使用されている高水準プログラミング言語の中でもFORTRANに次いで2番目に古い。ただし、FORTRANと同様に、現在のLISPは初期のものから非常に大きく変化している。 これまでに多数の方言が存在してきたが、今日最も広く知られるLISP方言は、Common LispとSchemeである。 元々、LISPは、アロンゾ・チャーチのラムダ計算表記法に影響を受け、コンピュータープログラムのための実用的かつ数学的な表記法として作られた。そして、すぐに人工知能研究に好まれるプログラミング言語になった。最初期のプログラミング言語として、LISPは計算機科学にて、木構造、ガベージコレクション、動的型付け、条件分岐、高階関数、再帰、セルフホスティング、コンパイラを含む多くのアイディアを切り開いた。 LISPの名前は、「list processor」に由来している。リストはLISPの主要なデータ構造であり、LISPソースコードはそれ自体がリストからできている。その結果、LISPプログラムはソースコードをデータとして操作することができ、プログラマーは、マクロ・システムで新しい構文やLISP埋め込みの新しいDSLを作成できる。 コードとデータの互換性は、LISPにそのすぐに認識できる構文を与える。すべてのプログラム・コードはS式または入れ子のリストとして書かれる。関数呼び出しまたは構文は先頭が関数または演算子の名前で、その続きが引数であるリストとして書かれる。具体的には、3つの引数を取る関数fは、(f arg1 arg2 arg3)として呼び出される。.

新しい!!: コンパイラとLISP · 続きを見る »

LLVM

LLVM とは、コンパイル時、リンク時、実行時などあらゆる時点でプログラムを最適化するよう設計された、任意のプログラミング言語に対応可能なコンパイラ基盤である。当初は、LLVM の名称の由来は、Low Level Virtual Machine (低水準仮想機械) の略であるとしていたが、現在は、何の頭文字でもないとしている。.

新しい!!: コンパイラとLLVM · 続きを見る »

Make

は、プログラムのビルド作業を自動化するツール。コンパイル、リンク、インストール等のルールを記述したテキストファイル (makefile) に従って、これらの作業を自動的に行う。.

新しい!!: コンパイラとMake · 続きを見る »

Oberon

Oberon(オベロン)は、チューリッヒ工科大学のニクラウス・ヴィルト率いるチームが設計開発したオペレーティングシステムとプログラミング言語の名称。天王星の衛星オベロンに由来する。.

新しい!!: コンパイラとOberon · 続きを見る »

OpenMP

OpenMPは、並列コンピューティング環境を利用するために用いられる標準化された基盤。OpenMPは主に共有メモリ型並列計算機で用いられる。 MPIでは明示的にメッセージの交換をプログラム中に記述しなければならないが、OpenMPはOpenMPが使用できない環境では無視されるディレクティブを挿入することによって並列化を行う。このため並列環境と非並列環境でほぼ同一のソースコードを使用できるという利点がある。 また、プラットフォーム固有のスレッドAPIを使わず、コンパイラによって暗黙的に生成されたスレッドプールを利用してタスクを振り分けることになるため、並列プログラムを簡潔に記述できるだけでなく、複数の環境に移植しやすくなる。 MPIとの比較では、OpenMPは異なるスレッドが同一のデータを同じアドレスで参照できるのに対して、MPIでは明示的にメッセージ交換を行わなければならない。そのためSMP環境においては大きなデータの移動を行なわずにすむので高い効率が期待できる。ただし並列化の効率はコンパイラに依存するのでチューニングによる性能改善がMPIほど高くならないという問題がある。また、。 現在FORTRANとC/C++について標準化が行われている。.

新しい!!: コンパイラとOpenMP · 続きを見る »

Pascal

Pascal(パスカル)は、ニクラウス・ヴィルトの設計(デザイン)によるコンピュータ・プログラミング言語である。ALGOL(直接的にはその一派生である、ヴィルトが関与したALGOL W)などの影響があるが、個人の設計であることに由来する簡素だがよく整った言語仕様(構文と意味)を持つ。用途の中に教育を意識しており、構造化された制御構造など、その当時「良きプログラミングの慣習」と考えられていたことの影響もある。一方で批判者からは、あくまでも教育用に過ぎない言語だ、といったような評もあることにはあったが、PascalコンパイラをPascalで書ける(いわゆる言語処理系のブートストラップ)ことをはじめ、Pascalで書かれた#実用プログラム例は多くある。名前は、哲学者・数学者・科学者で、機械式計算機を製作するなど技術者でもあったブレーズ・パスカルにあやかったものである。.

新しい!!: コンパイラとPascal · 続きを見る »

Pコードマシン

pコードマシンとは、プロセッサの一種であるが、ハードウェアではなくソフトウェアで、すなわちエミュレータや仮想機械のようなインタプリタ型のプログラムで実装されることを目的としたものである。この用語は、そのような仕様一般を指すこともあるが、多くの仕様はそれぞれ個々の名称を持っている。特にUCSD Pascalの p-Machine を指すことが多い。「p」の意味については、Pascal処理系の場合はPascalの頭文字ともされるが、他言語の場合はpseudo(を参照)やportableなどとされる。 このコンセプトは1966年ごろ、BCPLのやニクラウス・ヴィルトののPとして実装されたのが最初であるが、pコード (p-code) と呼ばれるようになったのは1970年代初期であった。pコードを生成する初期のコンパイラとしては、1973年、Nori、Ammann、Jensen、Hageli、Jacobi が開発した Pascal-P コンパイラと、ヴィルトが1975年に開発した Pascal-S コンパイラがある。 ソースコードからコンパイラのコード生成によってpコードが生成され、そのpコードはpコードマシンのエミュレータ、言い換えればインタプリタによって解釈実行される。商業的に十分意味があるとみて、pコードを直接実行するハードウェアが実装された例もある(例えば、Pascal MicroEngine)。.

新しい!!: コンパイラとPコードマシン · 続きを見る »

PL/0

PL/0(ピーエルゼロ)はプログラミング言語の名称。少なくとも2種類の言語が知られており、その1つは IBM の汎用プログラミング言語 PL/I のサブセットである。 本項で詳述するもう一方のPL/0は、教育目的でPascalを簡略化したバージョンのプログラミング言語である。主にコンパイラの設計開発の実例として使用される。1975年、ニクラウス・ヴィルトの著書 Algorithms + Data Structures.

新しい!!: コンパイラとPL/0 · 続きを見る »

Prolog

Prolog(プロログ)は、非手続き型プログラミング言語の一つ。論理型言語に分類される。名称は、「論理を使ったプログラミング」を意味するフランス語「programmation en logique」に由来しているRobert Kowalski.

新しい!!: コンパイラとProlog · 続きを見る »

Python

Python(パイソン)は、汎用のプログラミング言語である。コードがシンプルで扱いやすく設計されており、C言語などに比べて、さまざまなプログラムを分かりやすく、少ないコード行数で書けるといった特徴がある。.

新しい!!: コンパイラとPython · 続きを見る »

Scheme

Scheme(スキーム)はコンピュータ・プログラミング言語 Lispの方言のひとつで、静的スコープなどが特徴である。仕様(2017年現在、改7版まで存在する)を指すこともあれば、実装を指すこともある。Schemeにより、Lisp方言に静的スコープが広められた。.

新しい!!: コンパイラとScheme · 続きを見る »

Smalltalk

Smalltalk(スモールトーク)は、Simula のオブジェクト(およびクラス)、LISPの徹底した動的性、LOGO のタートル操作や描画機能に、アラン・ケイの「メッセージング」というアイデアを組み合わせて作られたクラスベースの純粋オブジェクト指向プログラミング言語、および、それによって記述構築された統合化プログラミング環境の呼称。 Smalltalk で一語であり、「Small Talk」「SmallTalk」などは誤りである。 大規模な開発実績としてはCargill Lynx Projectがあり、国産製品の開発実績としてはMCFrameがある。.

新しい!!: コンパイラとSmalltalk · 続きを見る »

SNOBOL

SNOBOLは、米国AT&Tベル研究所のグリスウォルド(Griswold)により開発されたプログラミング言語である。.

新しい!!: コンパイラとSNOBOL · 続きを見る »

携帯情報端末

携帯情報端末(けいたいじょうほうたんまつ、個人情報端末とも)とは、スケジュール、ToDo、住所録、メモなどの情報を携帯して扱うための小型機器。Personal Digital Assistant(Personal Data Assistantと表現されることもある)を略してPDAと一般に呼ばれることが多い。PDAは、アップル・ニュートンの開発を推進した1990年代初頭のアップルコンピュータCEOだったジョン・スカリーによる造語である。.

新しい!!: コンパイラと携帯情報端末 · 続きを見る »

構文解析

構文解析(こうぶんかいせき、syntactic analysis あるいは parse)とは、文章、具体的にはマークアップなどの注記の入っていないベタの文字列を、自然言語であれば形態素に切分け、さらにその間の関連(修飾-被修飾など)といったような、統語論的(構文論的)な関係を図式化するなどして明確にする(解析する)手続きである。自然言語については自然言語処理における要点のひとつであり、プログラミング言語など形式言語の場合は、形式文法に従い構文木を得る。構文解析を行う機構を構文解析器(parser)と呼ぶ。.

新しい!!: コンパイラと構文解析 · 続きを見る »

構文解析器

構文解析器(こうぶんかいせきき)とは、構文解析をおこなうプログラム。パーサ (parser)とも。プログラミング言語処理系の入力部分が代表的であるが、それに限らず設定ファイルの読み込みなど、構造を持った入力テキストの処理を行う。自然言語処理でも使われる。 構文解析のアルゴリズムには複雑なものも多いが、パーサジェネレータの研究は盛んであり、そういったものを使用zすれば、構文規則を記述するだけで構文解析器を自動的に生成できる(プログラムのソースコードが出力される)。.

新しい!!: コンパイラと構文解析器 · 続きを見る »

構文木

構文木(こうぶんぎ)とは、構文解析の経過や結果(またはそれら両方)を木構造で表したもの。.

新しい!!: コンパイラと構文木 · 続きを見る »

機械語

機械語(きかいご)またはマシン語(Machine code、machine language)とは、コンピュータのプロセッサが直接解釈実行可能な一連の命令群のデータそのもの(を、コンピュータ・プログラミング言語とみなしたもの)である。.

新しい!!: コンパイラと機械語 · 続きを見る »

正当性 (計算機科学)

計算機科学における正当性(Correctness)とは、アルゴリズムがその仕様に照らして正しいことを意味する。「機能的」正当性とは、アルゴリズムの入出力動作に関する正当性である(すなわち、各入力に対して正しく出力を生成すること)。形式的検証を参照されたい。 完全正当性(Total Correctness)は、アルゴリズムが常に停止することも要求される。一方、部分正当性(Partial Correctness)は単に返ってくる答えが正しいことのみを要求する(常に答えが返ってくるとは限らない)。停止問題には汎用的解法はないので、完全正当性はより深い問題をはらんでいる。 例えば、整数を 1 から順に調べて奇数の完全数を探すとした場合、部分正当性を備えたプログラムを書くのは極めて簡単である(素因数分解を行って n が完全数かどうかを調べる)。しかし、そのプログラムが完全正当性を備えているとするには数論において未知の知識を必要とする。 正当性の証明は数学的証明でなければならず、アルゴリズムもその仕様記述も形式的に与えられなければならない(形式的仕様記述)。特にその証明は、そのアルゴリズムを特定のマシン上でプログラムとして実装したものについて正当性を意味するものではない。その場合メモリ量の限界を考慮する必要がある。 証明論におけるカリー・ハワード対応は、直観主義論理における機能的正当性の証明がラムダ計算における特定プログラムに対応するとしている。このような証明の変換を「プログラム抽出; program extraction」と呼ぶ。.

新しい!!: コンパイラと正当性 (計算機科学) · 続きを見る »

正規表現

正規表現(せいきひょうげん、regular expression)とは、文字列の集合を一つの文字列で表現する方法の一つである。正則表現(せいそくひょうげん)とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正規式と呼ばれることもある。 もともと正規表現は形式言語理論において正規言語を表すための手段として導入された。形式言語理論では、形式言語が正規言語であることと正規表現によって表せることは同値である。 その後正規表現はテキストエディタ、ワードプロセッサなどのアプリケーションで(ないし、そもそもそれ以前に単機能の文字列探索ツールの)、マッチさせるべき対象を表すために使用されるようになり、表せるパターンの種類を増やすために本来の正規表現にはないさまざまな記法が新たに付け加えられた。このような拡張された正規表現には正規言語ではない文字列も表せるものも多く、ゆえに正規表現という名前は実態に即していない面もあるが、伝統的に正規表現と呼ばれ続けている。 この記事では主にこのような正規表現を用いたパターンマッチングについて説明している。以下、誤解のない限り、アプリケーションやプログラミングにおいて正規表現を用いた文字列のパターンマッチングを行う機能のことを、単に正規表現という。 ほとんどのプログラミング言語では、ライブラリによって正規表現を使うことができる他、一部の言語では正規表現のリテラルもある。「正規表現によるマッチ」を意味する(専用の)演算子がある言語なども一部ある。具体例として、grep、AWK、sed、Perl、Tcl、lexなどがある。 それぞれの言語やアプリケーションで細部の仕様が異なっている、といったように思われることも多いが(また、古い実装では実際にそういうことも多いが)、近年は同じライブラリを使っていれば同じということも多い。またPOSIXなど標準もある。.

新しい!!: コンパイラと正規表現 · 続きを見る »

正規言語

正規言語(せいきげんご)または正則言語(せいそくげんご)は、以下に示す性質(いずれも等価)を満たす形式言語である。.

新しい!!: コンパイラと正規言語 · 続きを見る »

漫画

漫画(まんが、(コミック)、cartoon、manga)とは、狭い定義では笑いを企図した絵をいい、「戯画(カリカチュア)」の概念と近い。広い定義では、必ずしも笑いを目的としない「劇画」「ストーリー漫画」「落書き」「アニメ」なども含み、幅広い意味を持つ。 日本では明治時代に輸入された"comic"、"cartoon"日本漫画家協会の英称はTHE JAPAN CARTOONISTS ASSOCIATIONであり、マンガ大賞の英称もCartoon grand prizeである。の日本語訳として「漫画」という言葉を北澤楽天や今泉一瓢が使用したことに始まって以後、漫画はcomicと同義として扱われる様になり、その意味での「漫画」が昭和初期に普及し、現代における漫画という語へ定着するようになった。本項では、日本の漫画のみではなく、漫画全般について説明する。.

新しい!!: コンパイラと漫画 · 続きを見る »

木構造 (データ構造)

親子構造 木構造(きこうぞう)とは、グラフ理論の木の構造をしたデータ構造のこと。.

新しい!!: コンパイラと木構造 (データ構造) · 続きを見る »

有限オートマトン

有限オートマトン(finite automaton)または有限状態機械(finite state machine, FSM)とは、有限個の状態と遷移と動作の組み合わせからなる数学的に抽象化された「ふるまいのモデル」である。デジタル回路やプログラムの設計で使われることがあり、ある一連の状態をとったときどのように論理が流れるかを調べることができる。有限個の「状態」のうち1つの状態をとる。ある時点では1つの状態しかとらず、それをその時点の「現在状態」と呼ぶ。何らかのイベントや条件によってある状態から別の状態へと移行し、それを「遷移」と呼ぶ。それぞれの現在状態から遷移しうる状態と、遷移のきっかけとなる条件を列挙することで定義される。 有限オートマトンは様々な問題に応用でき、半導体設計の自動化、通信プロトコル設計、構文解析などの工学面での応用がある。生物学や人工知能研究では状態機械(群)を使って神経系をモデル化し、言語学では自然言語の文法をモデル化したりする。.

新しい!!: コンパイラと有限オートマトン · 続きを見る »

最適化

最適化(さいてきか、Optimization)とは、関数・プログラム・製造物などを最適な状態に近づけることをいう。具体的には次のような操作を意味する。.

新しい!!: コンパイラと最適化 · 続きを見る »

最適化 (情報工学)

ンピュータ関連において最適化(Optimization)という語は、最適化問題のそれを指すことも多いが、ここでは、コンパイラ最適化などに似た話題について説明する(「情報工学」と記事名には付いているが、全く information engineering の話題ではない)。コンピュータシステムは、主としてコストパフォーマンス上の理由から、効率的に(efficiently)動作することが望ましいことが多い。例えば、コンパイラ最適化は、高速化のためだったり、メモリの使用量を削減するためだったり、電力消費を抑えるためだったりする。最適化の対象となるシステムは、1つのプログラムの場合もあるし、複数のコンピュータの場合もあるし、インターネットのようなネットワーク全体の場合もある。 "optimization" という単語の語源は "optimal"(最適な、最善な)と同じだが、最適化によって真に最適なシステムとなることは稀である。最適化されたシステムは一般にある面でのみ最適となる。プログラムの実行時間を削減するためにメモリ使用量を増やしてでも実行時間を最適化したり、逆にメモリが少ないシステムで実行時間が長くなることを覚悟してメモリ使用量が少ないアルゴリズムを選んだりする。あらゆる場合に最適な方法や設計は存在しないので、技術者は最も重要と思われる観点での最適化のために妥協点を探る。さらに、ソフトウェアを完全に最適にする(それ以上どうやっても最適化できない状態にする)のに要する労力は、その最適化されたシステムを利用することで得られる利益よりも大きい。従って、最適化の工程は完全な最適解に到達する以前に終了させられるのが普通である。幸いなことに、効果の大きい改善は最適化工程の初期に現れることが多い。 最適化は様々なレベルで行われる。最も高いレベルの最適化は設計段階に行われる。設計が最適化されていれば、実装でも効率的なアルゴリズムを利用でき、品質のよいコードになるという利点がある。コンパイラ最適化を使えば、実行ファイルがさらに最適化される。最も低いレベルでは、コンパイラを使わずに人間がアセンブリ言語で最適なコードを書く。コンパイラ最適化の技術の進歩と最近のCPUの複雑さのため、コンパイラよりも最適なコードを人間が書くには大変な技能を要する。そのため、このような最適化を行うプロジェクトは滅多にない。最適化は例外的なケースを考慮しつつ、複雑な妥協点を探ることが多い。従って最適化されたプログラムはプログラマが理解できないほど難解になることも多い。可能であれば等価であることが保証されながらプログラムを変形させるなどの手法でバグの可能性をゼロにすべきだが、できない場合、できてないコードではバグを多く含む危険性がある。.

新しい!!: コンパイラと最適化 (情報工学) · 続きを見る »

情報工学

情報工学(じょうほうこうがく)は情報分野についての工学である。語感としては、情報科学という語がもっぱらおおまかに「科学」という語が指す範囲を中心としているのに対し、「工学」的な分野に重心があるが、内実としてはどれもたいして変わらないことが多い(たとえば、大学の学部学科名などに関しては、個々の大学の個性による違いのほうが、名前による違いより大きい)。日本で、大学の工学部などにコンピュータ科学ないし情報関係の学科を設置する際に、「工学」部という語との整合のためだけに便利に使われた、という面が大きい(情報工学科の記事を参照)。 なお英語の information engineering はソフトウェア工学における一手法であり、日本語の「情報工学」とは対応しない。また似た言葉に情報学がある。.

新しい!!: コンパイラと情報工学 · 続きを見る »

ここにリダイレクトされます:

コンパイラーコンパイラ言語コンパイルコンパイル言語

出ていきます入ってきます
ヘイ!私たちは今、Facebook上です! »