Lex
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/12/02 14:41 UTC 版)
作者 | エリック・シュミット、マイク・レスク |
---|---|
リポジトリ | |
プログラミング 言語 | C言語 |
対応OS | Unix |
サポート状況 | 開発終了 |
種別 | コマンド |
概要
名称
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の命令や関数が含まれている。 これらの命令は規則領域での規則により呼ばれたコードを含む場合もある。大規模なプログラムではここに分割しておきコンパイル時にリンクするほうが便利である。
- ^ POSIX 1003.1-2008 - IEEE(有料)
- ^ Theory of Compilation -- JLex, CUP tools --(PDF) - by Haifa Univ. Bilal Saleh
- ^ Flex The Lexical Scanner Generator - G. T. Nicol(日本語訳)
- 1 Lexとは
- 2 Lexの概要
- 3 Lexの正規表現
LE-9
(Lex から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/03/01 00:39 UTC 版)
LE-9は、宇宙航空研究開発機構(JAXA)が三菱重工業とIHIと共に開発したH3ロケットの第1段用液体燃料ロケットエンジンで、世界初の第1段用の大推力エキスパンダーブリードサイクルエンジン[1]。燃料に液体水素、酸化剤に液体酸素を使用し、H3ではペイロードの重量や投入軌道に合わせてLE-9を2基又は3基にクラスター化して用いる[2]。「キー技術関連事業者」として三菱重工業がエンジンシステムを、IHIがターボポンプの開発を担当している[3]。
注釈
出典
- ^ 松浦晋也 (2021年2月2日). “H3ロケットの主エンジン「LE-9」熱効率向上で世界初に挑戦”. 日経ビジネス. 2022年2月23日閲覧。
- ^ “H3ロケットの開発状況について” (PDF). 文部科学省 宇宙開発利用部会 (2016年2月2日). 2016年2月24日閲覧。
- ^ a b “2020年:H3ロケットの目指す姿” (PDF). JAXA (2015年7月8日). 2016年2月24日閲覧。
- ^ “JAXA's No.062” (PDF). JAXA (2015年10月). 2018年10月22日閲覧。
- ^ ““魔物”のロケットエンジン、LE-9開発に挑む H3プロジェクトマネージャー、JAXAの岡田匡史氏に聞く(その2)”. 日経BP社 (2015年10月5日). 2016年1月11日時点のオリジナルよりアーカイブ。2016年2月24日閲覧。
- ^ “三菱重工|MB-XX”. 2016年2月24日閲覧。
- ^ “ロケット用上段エンジンMB-XXの実証エンジン燃焼試験に成功” (2005年9月16日). 2016年5月29日閲覧。[リンク切れ]
- ^ “姿を現した次世代の大型ロケットエンジン「LE-9」 第2回 2020年の打ち上げに向けたスケジュール”. マイナビニュース (2017年11月27日). 2019年12月25日閲覧。
- ^ a b “三菱重工技報,第48巻第4号「LE-Xエンジン開発へ向けた取り組み」” (PDF). 2016年2月24日閲覧。
- ^ “IHI技報,第49巻第3号「LE-Xエンジン用ターボポンプの研究」” (PDF). 2016年2月24日閲覧。
- ^ “三菱重工技報,第55巻第2号「H3 ロケット1段用LE-9 エンジンの燃焼安定性予測技術及び対策技術開発」” (PDF). 三菱重工 (2018年). 2019年11月30日閲覧。
- ^ “H3ロケットの開発状況について” (PDF). JAXA (2019年12月10日). 2020年3月26日閲覧。
- ^ (日本語) 2020年2月13日に行われたH3ロケットの大型エンジン「LE-9」3基による燃焼試験(BFT)の様子 (C)JAXA 2020年3月26日閲覧。
- ^ “第8回 第1段厚肉タンクステージ燃焼試験結果|H3|ロケット|JAXA 第一宇宙技術部門 ロケットナビゲーター”. www.rocket.jaxa.jp. 2020年3月26日閲覧。
- ^ “LE-9エンジン×3基の燃焼試験が初公開、H3ロケットのBFTは全て無事に完了!”. マイナビニュース. (2020年2月19日)
- ^ (日本語) 【録画】LE-9エンジンの開発状況について 2021年4月17日閲覧。
- ^ 日本放送協会. “日本の主力ロケットH3 打ち上げ1年延期し来年度に JAXA”. NHKニュース. 2020年9月11日閲覧。
- ^ “JAXA、H3ロケットの開発計画を見直し - LE-9エンジンに技術的課題を確認”. マイナビニュース. 2020年9月14日閲覧。
- ^ “H3ロケット開発を襲った“魔物”とは?、エンジンに見つかった技術的課題 2/2”. マイナビニュース. (2020年9月24日)
- ^ “H3ロケットの試験機1号機の打上げについて”. 国立研究開発法人宇宙航空研究開発機構 (2022年1月21日). 2022年1月21日閲覧。
- ^ 日本放送協会. “JAXA 日本の新たな主力ロケット「H3」の打ち上げ延期 正式発表”. NHKニュース. 2022年1月22日閲覧。
- ^ H3ロケット、2022年度内の打ち上げ目指す。対策案を並行開発し、延期の原因となった振動問題を解決【宇宙ビジネスニュース】 宙畑 2022年9月5日
- ^ 「困難は技術を飛躍させる」—H3ロケット、2022年度打ち上げへ正念場 三菱電機 2022年9月22日
- ^ “新型ロケット「H3」 発射地点でメインエンジン燃焼試験 鹿児島”. 日本放送協会 (2022年11月7日). 2022年11月8日閲覧。
- ^ “JAXA | H3ロケット試験機1号機による先進光学衛星「だいち3号」(ALOS-3)の打上げについて”. JAXA | 宇宙航空研究開発機構 (2022年12月23日). 2022年12月25日閲覧。
- ^ “H3ロケット用LE-9認定型エンジン燃焼試験の実施について|LE-9|エンジン|ロケット|JAXA 宇宙輸送技術部門”. www.rocket.jaxa.jp. 2024年3月1日閲覧。
- ^ 株式会社インプレス (2024年2月16日). “H3ロケット2号機打ち上げ成功 基幹ロケットの意義とこれから”. Impress Watch. 2024年3月1日閲覧。
- ^ “H3ロケット基本設計結果について” (PDF). JAXA (2016年6月14日). 2016年6月21日閲覧。
LEX
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/11/28 05:56 UTC 版)
LEX
- Leading Edge extension(ストレーキ又はストレーク)。飛行機の胴体前方で横に張り出した空力パーツ。
- ブルーグラス空港のIATA空港コード。
- レックススタッド。種牡馬繋養場。
- lex。UNIXコマンド。
- LEX (ラッパー)
関連項目
- レックス(曖昧さ回避)
lex
- Lexのページへのリンク