|
構文解析(こうぶんかいせき、syntactic analysis あるいは parse)とは、文章、具体的にはマークアップなどの注記の入っていないベタの文字列を、自然言語であれば形態素に切分け、さらにその間の関連(修飾-被修飾など)といったような、統語論的(構文論的)な関係を図式化するなどして明かにする(解析する)手続きである。自然言語については自然言語処理における要点のひとつであり、プログラミング言語など形式言語の場合は、形式文法に従い構文木を得る。構文解析を行う機構を構文解析器(parser)と呼ぶ。 == 形式言語 == プログラミング言語の場合は一般にその性質から、文字列(ソースコード)から字句(トークン)の列を取り出す前処理段階である字句解析(lexical analysis)と、そのトークン列を受け取り構文木を作るなどする後処理段階の2段階に分けてその全体を広義の構文解析とし、特に後処理のみを指して狭義の構文解析とすることが多い(PEGのように融合して扱う場合も多い手法もある)。以下、その狭義の構文解析について述べる。 構文解析では、構文木や抽象構文木のようなデータ構造を生成し、プログラミング言語のコンパイラであれば、いわゆるコンパイラバックエンドに渡す。サンプルなどによく見られる四則演算の式の演算などのような簡単な場合は、構文解析と同時に、目的の処理をおこなってしまう場合もある。 形式言語とオートマトンの対応は、良く理論付けられており、構文解析のアルゴリズムは、その入力である形式言語に対応するオートマトンの実装にほかならない。 プログラミング言語の場合、実用上、プログラムとして正しい入力のみを受け付けるような構文規則を定めることは現実的でない〔たとえば、多くのプログラミング言語では、関数や手続きの定義で「仮引数の並び」に、同じ名前の引数が複数個現れることは文法違反であるとしているが、そのようなルールを構文規則として埋め込むのは現実的ではない。〕。そのため、一般に構文規則では言語本来より制約を弱くし(つまり、本来の言語の文法よりも広く、不正な入力も受け付けるようにし)後で不正なものを排除するようにすることが多い。 構文解析器を一から作るのではなく、パーサジェネレータで生成することも広く行われている。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「構文解析」の詳細全文を読む 英語版ウィキペディアに対照対訳語「 Parsing 」があります。 スポンサード リンク
|