「プログラミング/共通知識」の版間の差分
削除された内容 追加された内容
→変数: 比較的古くからある言語では、大文字・小文字を区別しない傾向にあります。具体的には、Fortran・COBOL・Lisp・ALGOLやBASICは大文字・小文字を区別しません。理由は1つではありませんが、有力な理由の1つに小文字がコードがコード化されたASCIIが制定される1963年より前、あるいは同時期に言語設計と言語処理系の実装が行われたから、と考えられます。むしろC言語(1972)が比較的古い言語であるにもかかわらず小文字を区別していることが特異的といえます。 タグ: 2017年版ソースエディター |
→字句解析機・構文解析器: 構文解析器と字句解析器を取違える間違えがあった。;構文の衝突に関する言及。lex yacc あるいはキーワード解析の完全ハッシュ関数化に関しては、コラムにまとめる予定。 タグ: 2017年版ソースエディター |
||
212 行
この様に、'''言語処理系の主要な実装が'''あるいは多くの場合は最初の実装が、インタプリタなのかコンパイラなのかで分類しているので、例外が生じる余地があります。
== 字句解析器・構文解析器 ==
== 字句解析器 ==
ソースコードは通常の文字列ですが、まずは、空白での区切りや既知のキーワードあるいは区切子に鑑み、文法上の最小単位の列に還元します。
トークンを切り出すプログラムのことをレキシカル・アナライザあるいは構文解析器(こうぶんかいせきき)と呼びます。▼
この文法上の最小単位をトークンと呼びます。
▲トークンを切り出すプログラムのことを字句解析器(じくかいせきき;''lexical analyzer'' レキシカル
===
このようなプログラムのことを、トークン列
構文解析にあたって、解析中のトークン列の注目している部分が、2つ以上の構文にマッチすることがあります(構文規の衝突;例えば懸垂if)。
この様な場合は、優先順位や結合方向を文法で規定することにより、一意にマッチする構文が定まるよう、実装上の工夫が必要です。
字句解析と構文解析を別々に行うことが可能なプリグラミング言語もありますが、多くのプログラミング言語では(文法に曖昧さがあったり、字句に対し意味論が重複している<ref>例えば、C++では、キャストと関数呼出しあるいは初期化の構文に衝突があり、型や関数の定義状況との照会を行わないと、構文の特定ができません。</ref>などの理由で)字句解析と構文解析は連携
== 文法 ==
|