L ファイル形式とは?
.lファイルは、Lex言語で記述されたプレーンテキストの字句解析器仕様書です。これは、入力文字列をどのようにトークンに分割するかを定義するもので、コンパイラ、インタプリタ、またはテキスト処理ツールの構築における最初のステップとなります。
この形式は、1975年にBell LabsのMike LeskとEric SchmidtによってUnixツールチェーンの一部として作成されました。今日、事実上すべての.lファイルは、Vern Paxsonによって開発されたGNU時代のオープンソースの後継ツールであるFlex (Fast Lexical Analyzer)によって処理されますが、ソースの構文は大部分が共通しています。
.lファイルは、%%マーカー行によって区切られた3つのセクションに分かれています。
- 定義 (Definitions) - 名前の付いた正規表現マクロと
%optionディレクティブ - ルール (Rules) - 正規表現と、一致したときに実行されるC言語のアクションコードのペア
- ユーザーコード (User code) - 出力にそのまま追加されるオプションのヘルパーC関数
上部付近にあるオプションの%{ ... %}ブロックは、生成されるスキャナにC言語の宣言を直接注入します。flex yourfile.l(またはlex yourfile.l)を実行すると、決定性有限オートマトンとしてスキャナを実装した、自己完結型のCソースファイルであるlex.yy.cが生成されます。その出力はCコンパイラでコンパイルされ、通常はYacc/Bison文法ファイルとリンクされて、完全な言語プロセッサが構築されます。
なお、.lはLispソースファイルやUnixのtroffマニュアルページソースにも使用されるため、種類を特定する際にはファイルの文脈が重要になります。
セキュリティと安全性
リスク: LOW.l Lexソースはプレーンテキストであり、エディタで安全に開くことができます。唯一の注意点として、ルールにはC言語のアクションコードが含まれており、悪意のある.lファイルにはコンパイル時に実行される有害なCコードが埋め込まれている可能性があります。信頼できないソースからの.lファイルは、flexを実行してビルドする前に内容を確認してください。
形式の詳細
概要- Lispソースファイル (.l) - 一部のLisp方言/実装がソースコードに使用します。プレーンテキストですが、Lexとは異なる言語です。
- Unix manページ / troffソース (.l) - nroff/troffソースにおけるセクションl(ローカル)のマニュアルページ。ドキュメントであり、レキサー仕様ではありません。
- Interleaf / WordPerfect ライブラリ (.l) - 古いドキュメントシステムのレガシーライブラリまたはリストファイル。稀です。
L ファイルを開くプログラム
技術的詳細
詳細仕様| フォーマットタイプ | プレーンテキスト字句解析器仕様書(ソースコード) |
| エンコーディング | ASCII / UTF-8 プレーンテキスト。バイナリヘッダーやマジックバイトなし |
| ファイル構造 | «%%»で区切られた3つのセクション:定義、ルール、ユーザーCコード |
| セクション1 - 定義 | 名前付き正規表現マクロと«%option»ディレクティブ(例:«%option noyywrap») |
| セクション2 - ルール | 正規表現パターンと、一致時に実行されるCアクションコードブロックのペア |
| セクション3 - ユーザーコード | 生成された出力ファイルにそのままコピーされるオプションのCヘルパー関数 |
| Cコード注入ブロック | 上部付近の«%{ ... %}»プロローグにより、生成されたスキャナにC言語の宣言を注入 |
| 主な出力 | «lex.yy.c» - DFAベースのスキャナを実装したCソースファイル |
| MIMEタイプ | `text/plain`(非公式エイリアス:`text/x-lex`) |
| 処理ツール | `lex` (AT&T/POSIX), `flex` (GNU), `win_flex` (Windows via WinFlexBison) |
| 一般的なファイルサイズ | 1 KB - 100 KB |
| スキャナアルゴリズム | ビルド時に正規表現ルールを決定性有限オートマトン(DFA)にコンパイル |
| 一般的なペアリング | 完全なコンパイラフロントエンドを構築するために、`.y` YaccまたはBison文法ファイルと組み合わされる |
| プラットフォームサポート | Unix, Linux, macOSはネイティブ対応。WindowsはMSYS2, Cygwin, またはWinFlexBison経由 |
| 拡張子の曖昧性 | `.l`はLispソースファイルやUnix troff manページソースにも使用されるため、ファイルの文脈が必要 |
| リリース日 | Lex, 1975 (Unix); standardized in POSIX (lex utility) |
| 最新バージョン | Flex 2.6.4 (2017) is the de-facto current implementation reading .l files |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | pubs.opengroup.org |
L の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。L ファイルについて最初の質問をしてみましょう。