[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

Lexとは? わかりやすく解説

Weblio 辞書 > コンピュータ > 拡張子辞典 > Lexの意味・解説 

.lex

読み方レックス

.lexとは、GNUプロジェクトによって開発されている字句解析プログラムである「Flex」のソースファイルに付く拡張子のことである。


【ストレーキ】(すとれーき)

Leading Edge eXtension(LEX).
航空機胴体機首側面設けられ張り出しのこと。
高い迎え角をとった時、ここから渦流発生させることにより、主翼失速遅らせる働きを得る。
また、この渦流垂直尾翼にも影響して迎え角が高い状態での方向安定性高め効果もある。
F/A-18やF-16で採用され形状として有名。

AV-8B 等では LERX (Leading Edge Root eXtension) と呼ばれる小型のストレーキが採用されている。


Lex

名前 レックス

Lex

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/12/02 14:41 UTC 版)

Lex
作者 エリック・シュミットマイク・レスク英語版
リポジトリ
プログラミング
言語
C言語
対応OS Unix
サポート状況 開発終了
種別 コマンド
テンプレートを表示

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

概要

名称

Lexはレキシカルアナライザジェネレータである。すなわちレキシカルアナライザ(字句解析プログラム、字句解析器)の生成ツールであり、Lexの名称も英語のLexical analysisからきている。

用途

字句解析はテキスト中の文字列の変換、カウント、抽出などさまざまな目的に使われ、その応用領域は、コンパイラやコンバータの作成を筆頭に、自然言語処理や簡単な整形まで幅広い。

このうち、コンパイラにおけるレキシカルアナライザの位置づけを、以下に説明する。 プログラム中間言語あるいは機械語に変換するコンパイラは、一般的にソースを入力し構文木を出力する構文解析部(1)と、その構文木を入力し中間言語コードまたは機械語を出力するコード生成部(2)からなる。

コンパイラ
 ├構文解析部(1)
 │ ├字句解析器(1.1) ←〔ソース〕
 │ │呼出し↑↓
 │ │   ↑〔トークン列〕
 │ │   ↑↓
 │ └構文解析器(1.2)
 │     ↓
 │  〔構文木〕
 │     ↓
 └コード生成部(2)   →〔中間言語コードまたは機械語〕

このうち(1)の前半は、ソースを入力しトークン(語彙素)列を出力する字句解析器(レキシカルアナライザ、トークナイザ、スキャナ)(1.1)である。 後半は、そのトークン列を入力し、構文規則にしたがって構文解析をし、構文木を出力する構文解析器(パーサ、パーザ)(1.2)である。 (1.1)のレキシカルアナライザを生成するのが、レキシカルアナライザジェネレータである。

機能概要

構文解析器(1.2)に解析を数字や英字や空白などの1文字単位で行わせると、複雜になりすぎる。しかし、人間が英文から英単語や数字などの記号列を、区切り文字(たとえば空白、タブ、改行、コンマ、終止符、カッコ)やその列を目印に抽出して、意味を判断しているのと、同様の発想ができる。すなわち、区切り記号列でソースを切っていくと、「print」のような語、「1999」のような10進数、「"Hello, world"」といった文字リテラル、「++」といった演算子、「}」や「;」など意味のある区切り文字など、各種の文字列が取り出せる。これをトークンという。ここまでの下位の文法処理を上記字句解析器(1.1)に行わせ、一方、構文解析器(1.2)はトークンから出発して句、文、ブロック、プログラムなどを認識する上位の文法処理に専念させる。この分業化により、それぞれの定義と処理を簡潔にできる。

この字句解析器(1.1)の合理的な開発を目的とし、機械可読にした規則定義を与えれば字句解析器を自動生成してくれる便利なツールがレキシカルアナライザジェネレータであり、LexやFlexなどがそれに属する。

〔規則定義〕
  ↓
レキシカルアナライザジェネレータ(Lex, Flexなど)
  ↓
〔字句解析器(1.1)〕

同様に、構文解析器(1.2)の合理的な開発を目的とし、構文規則定義を与えれば構文解析器を自動生成してくれる便利なツールとして、Yacc(Yet Another Compiler Compiler)などのパーサジェネレータ(コンパイラコンパイラ)がある。

構文解析器ジェネレータとの関係

Yaccなどの構文解析器生成ツールを利用するなら、Lexに字句文法定義を与えて生成させたC言語ソースである字句解析器が(Yaccがトークンをユーザから得るための)yylex関数を含んでいるので、CコンパイラでYacc出力と一緒にこれをリンクして組み込む。これにより、ソーステキストの字句解析と構文解析を両方行って、規則のアクション部(あるいはさらにそれに呼ばれるユーザ作成のC言語関数)に書かれた計算の結果や、コンパイルの生成に使われる抽象構文木の構造体データ、あるいは各種表示が出力される変換プログラムが完成する。

YaccとLexはよく似た文法定義をもち、セットで使われ、セットで解説されることが多い。LexとYaccの機能はIEEE POSIX 1003.1-2008(かつては1003.2)で標準化されている[1]

配布と派生、改良

YaccはほとんどのUNIXシステムで、デフォルトのレキスカルアナライザジェネレータとして利用可能だった。 Lexは多くのシステム、多くのプログラミング言語に移植されている。たとえばJava言語による字句解析器を生成するLex系ツールに、JLex、それを書き直したJFlexがある。このJFlexとJava言語用構文解析器CUPと組みあわせて用いることも行われている[2]

Lexと同等の機能を有し性能が改善されているFlex(英語版)というものもある[3]が、開発者がLexの開発者とは別人のen:Vern Paxsonであり、ライセンスもLexが Plan 9: MIT Licenseなのに対しFlexのほうはBSDライセンスであり、つまりは全く別のソフトウェアであり、しっかり区別したほうがよい。

Flexについては別記事 Flex (字句解析器・生成器)英語版 を立ち上げ、そちらで説明すること。

Lex のファイル構造

Lexのファイル構造は意識的にyaccのそれに似せて定義されている。 ファイルは3つの部分に分割されており、それぞれ定義領域、規則領域、Cコード領域である。各領域はパーセント記号2つ(%%)のみを含んだ行で区切られる。

定義領域は正規表現を用いてマクロを定義するところであり、かつCのヘッダーファイルを取り込む場所でもある。

規則領域は最も重要な領域でありCの命令との関連付けを行う。Lexの規則と一致するパターンがあるとそれに関連付けされたCコードを実行する。

Cコード領域には生成したソースにそのままコピーされるCの命令や関数が含まれている。 これらの命令は規則領域での規則により呼ばれたコードを含む場合もある。大規模なプログラムではここに分割しておきコンパイル時にリンクするほうが便利である。

Lexの正規表現

  • 通常の正規表現の特殊文字にくわえ、「"」 「/」 「%」 「(」 「)」 「+」 「/」 「<」 「>」 「?」 「{」 「|」 「}」 も特殊文字である
  • 行頭の「%」は、上述のように領域を区切ったり、Lex特有の指示をあたえるために使う
  • 文字クラス、否定文字クラスの内側で「\」が特殊文字になる
  • 陽に指定したときを除いて、否定文字クラスは、改行にも照合する
  • "」で引用できる。引用の終了も「"
  • パターン{最少,最多}」や「パターン{回数}」でパターンの繰返し回数を指定できる (Grepの拡張正規表現と同じ)
  • +」は「{1,}」の、「?」は「{,1}」の、それぞれの省略形である (Grepの拡張正規表現と同じ)
  • |」で択一できる。「(」と「)」で範囲を広げて指定できる (Grepの拡張正規表現と同じ)
  • \b」「\f」「\n」「\r」「\t」「\v」「\8進数」は、Cの文字定数の定義と同じ
  • 「<開始条件>正規表現」で、指定の名前の開始条件にあるときの正規表現だけに照合できる。開始条件は、コンマで区切って複数指定できる
  • 「r/s」は、正規表現「s」の後続する正規表現「r」を表わす。アクションで参照できるのが「r」のみになるところが、重要である
  • {名前}」で、定義領域で定義した名前のマクロに展開される

脚注・出典

  1. ^ POSIX 1003.1-2008 - IEEE(有料)
  2. ^ Theory of Compilation -- JLex, CUP tools --(PDF) - by Haifa Univ. Bilal Saleh
  3. ^ Flex The Lexical Scanner Generator - G. T. Nicol(日本語訳)

関連項目

外部リンク

  • 字句解析 (日本語)- Oracle Documentation プログラミングユーティリティ 第2章、

特にlex と yacc の併用

特にFlex と Lex


LEX

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/11/28 05:56 UTC 版)

LEX

関連項目


lex

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2013/01/01 09:34 UTC 版)

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

目次

概要

lexはレキシカルアナライザジェネレータである。

レキシカルアナライザジェネレータの位置づけを以下に説明する。 プログラム中間言語あるいは機械語に変換するコンパイラは、一般的にソースを入力し構文木を出力する構文解析部(1)と、その構文木を入力し中間言語コードまたは機械語を出力するコード生成部(2)からなる。

コンパイラ
 ├構文解析部(1)
 │ ├字句解析器(1.1) ←〔ソース〕
 │ │呼出し↑↓
 │ │   ↑〔トークン列〕
 │ │   ↑↓
 │ └構文解析器(1.2)
 │     ↓
 │  〔構文木〕
 │     ↓
 └コード生成部(2)   →〔中間言語コードまたは機械語〕

このうち(1)の前半は、ソースを入力しトークン(語彙素)列を出力する字句解析器(レキシカルアナライザ、トークナイザ、スキャナ)(1.1)である。 後半は、そのトークン列を入力し、構文規則にしたがって構文解析をし、構文木を出力する構文解析器(パーサ、パーザ)(1.2)である。

構文解析器(1.2)に、解析を数字や英字などの文字単位で行わせると、複雜になりすぎる.そこで、たとえば10進数、英数字シンボル、文字列リテラル、ホワイトスペース列などといった、トークンと呼ばれる文字列単位にまとめて簡潔に行うために,上記字句解析器(1.1)を呼び出してはトークンを受取りながら実行する。

この字句解析器(1.1)の合理的な開発を目的とし、機械可読にした規則定義を与えれば字句解析器を自動生成してくれる便利なツールがレキシカルアナライザジェネレータであり、lexやflexなどがそれに属する。

〔規則定義〕
  ↓
レキシカルアナライザジェネレータ(lex, flexなど)
  ↓
〔字句解析器(1.1)〕

同様に、構文解析器(1.2)の合理的な開発を目的とし、構文規則定義を与えれば構文解析器を自動生成してくれる便利なツールとして、yacc(yet another compiler compiler)などのパーサジェネレータ(コンパイラコンパイラ)がある。

yaccとlexはセットで使われ、セットで解説されることが多い。lexとyaccの機能はIEEE POSIX P1003.2で標準化されている。

lex のファイル構造

lexのファイル構造は意識的にyaccのそれに似せて定義されている。 ファイルは3つの部分に分割されており、それぞれ定義領域、規則領域、Cコード領域である。各領域はパーセント記号2つ(%%)のみを含んだ行で区切られる。

定義領域は正規表現を用いてマクロを定義するところであり、かつCのヘッダーファイルを取り込む場所でもある。

規則領域は最も重要な領域でありCの命令との関連付けを行う。lexの規則と一致するパターンがあるとそれに関連付けされたCコードを実行する。

Cコード領域には生成したソースにそのままコピーされるCの命令や関数が含まれている。 これらの命令は規則領域での規則により呼ばれたコードを含む場合もある。大規模なプログラムではここに分割して置きコンパイル時にリンクするほうが便利である。

flex用のサンプルファイル

次の例はflex版の入力ファイルのサンプルである。これは入力中の整数値を認識する。 "abc123z.!&*24ghj6"という入力があると次のような表示を行う。

Saw an integer: 123
Saw an integer: 24
Saw an integer: 6
/* 
 * flex用字句解析 例
 *
 * 数値(整数値)を入力を取り出す.
 */

/*** Definition section ***/

%{

/*
 * C コードにはCの標準I/O ライブラリを使うものがある.
 * %{と %} で囲まれた部分はそのまま生成ファイルに
 * 取り込まれる.
 */
#include <stdio.h>

%}

/* マクロ;  正規表現 */
DIGIT       [0-9]
INTEGER     {DIGIT}+

/* これはflexに入力ファイルが一つであることを示す. */
%option noyywrap

%%
    /*
     * 規則領域
     *
     * コメントはインデントしなければならない.
     * そうしないと正規表現と誤認識してしまう.
     */

{INTEGER}   {
                /*
                 * この規則は入力から整数を表示する.
                 * yytextには一致した文字列が含まれる.
                 */
                printf("Saw an integer: %s\n", yytext); 
            }

.           { /* それ以外の文字は無視. */ }

%%
/*** Cコード領域 ***/

/*
 * メインプログラム.
 *
 * 字句解析を呼び出し、処理が済むと終了する. 
 */
int main(void)
{
    /* yyin はlexが読むファイルでここでは標準入力になっている. */
    FILE *yyin = stdin;

    /* 字句解析の呼び出し. */

    yylex();
    return 0;
}

関連項目

外部リンク


「lex」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

「Lex」の関連用語

Lexのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Lexのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
拡張子辞典拡張子辞典
Copyright © 2005-2025 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【.lex】の記事を利用しております。
航空軍事用語辞典++航空軍事用語辞典++
この記事はMASDF 航空軍事用語辞典++の記事を転載しております。
MASDFでは航空及び軍事についての様々なコンテンツをご覧頂けます。
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのLex (改訂履歴)、LEX (改訂履歴)、lex (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2025 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2025 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2025 GRAS Group, Inc.RSS