プチコン3号&BIGまとめWiki

Toukou/LEX の変更点

パンくずリスト


#title(投稿プログラム : LEX)
#contents
// ↑↑↑↑ この2行は削除しないでください。 ↑↑↑↑
//
// ←このように「//」で始まる行はコメントです。ページ本文には反映されません。
//------------------------------------------------------------------------------
// ・投稿年月日は、このページを投稿しようとしている今日の日付を半角数字で入力してください。
//   この日付は、投稿プログラムを自動的に年月日順に並べる際に使用されます。
// ↓↓↓
2015年8月1日投稿
// ↑↑↑
//------------------------------------------------------------------------------
// ・投稿者名は、将来的に投稿プログラム一覧に表示するために使用します。
// ・「名無しさん」のままにしておくと、匿名の方からの投稿として扱われます。
// ↓↓↓
/ 投稿者 : actorbug
// ↑↑↑
//------------------------------------------------------------------------------
// ・適当にタグをつけることができます。半角のコンマ区切りで複数つけられます。
//   タグをつけると、同じタグが付いたページを検索することができます。
// ★次に該当するプログラムは、特定のタグを設定するようご協力お願いします。
//   これらを設定すると、将来的に投稿プログラム一覧に目立つマークが付くようになる予定です。
// ・短いプログラム → 「1行プログラム」「数行プログラム」「1画面プログラム」タグのいずれか1つ
// ・該当するなら「ゲーム」「実用ツール」「音楽」タグのいずれか
// ↓↓↓
/ &tag(投稿プログラム,実用ツール,actorstool);
// ↑↑↑

//------------------------------------------------------------------------------
// ここに概要とか書きます。
// ・** や *** で始まる行は子見出しとなります。* の数で深さが決まります。
// ・[#英数字] はページ内リンクに使用されるキーワードとなりますが、
//   消してもかまいません。ない場合はランダムな文字列が自動付与されます。
//   逆に、[#英数字] して同じものを増やしてしまった場合、目次からのリンクがちょっとおかしくなります。

* 概要 [#Summary]
字句解析器を作成するLEXのようなもの。

* 使い方 [#Komidashi1]
+ プログラムを実行すると、同じプロジェクト内のLEXファイル(拡張子".L")の一覧が表示される。
+ ファイルを十字キー上下で選択し、Aで決定。
+ 変換処理が行われるので、しばらく待つ
+ 変換後のファイル名を指定するダイアログが出るので、適当なファイル名をつけて保存。

* LEXファイルの構造 [#Komidashi2]
LEXファイル(拡張子".L")は、宣言部、ルール部、ユーザコード部からなり、それぞれの間は"%%"だけの行で区切られる。

** 宣言部 [#Komidashi2-1]
宣言部は、よく使う正規表現に名前を付けることができる。~
名前と正規表現をスペースで区切って一行に配置する。

それ以外に、先頭が"%"の行には特殊な意味がある。
|~行頭|~説明|
|%option|オプション設定。現状"case-insensitive"(大文字小文字同一視)しか受け付けない|
|%{〜%}|この間に書かれた文字列は、変換後のプログラムの先頭にそのまま転記される|
|%YY_DECL|生成された字句解析器の関数定義。デフォルトは"COMMON DEF YYLEX S$,SP OUT EP"。S$が対象文字列、SPが開始位置、EPが終了位置|

** ルール部 [#Komidashi2-2]
ルール部は、正規表現と、マッチした場合に実行されるプログラムを、スペースで区切って一行に配置する。~
マッチした場合には、以下の変数に値が入った状態でプログラムが実行される。
|~変数|~説明|
|T$|マッチした文字列|
|SP|マッチした先頭位置|
|EP|マッチした末尾位置|

** ユーザコード部 [#Komidashi2-3]
ユーザコード部に書かれたプログラムは、変換後のプログラムの末尾にそのまま転記される。

* 使用可能なメタ文字 [#Komidashi3]
|~メタ文字|~説明|
|\|直後のメタ文字を無効化して通常文字として扱う|
|"〜"|範囲内のメタ文字を無効化して通常文字として扱う|
|{〜}|名前のついた正規表現を参照|
|\n|LF、CHR$(10)|
|\r|CR、CHR$(13)|
|\t|Tab、CHR$(9)|
|\xFF|16進2桁で文字コード指定|
|\uFFFF|16進4桁で文字コード指定|
|[]|文字クラス、括弧内の文字のいずれかにマッチ、-で範囲指定可能|
|[^]|否定文字クラス、括弧内の文字以外にマッチ、-で範囲指定可能|
|.|任意の1文字(改行を除く)にマッチ|
|^|文字列の先頭 or 改行の次|
|$|文字列の末尾 or 改行の前|
|()|グループ化|
|||選択|
|*|直前の式の0回以上の繰り返し、{0,}と同じ|
|+|直前の式の1回以上の繰り返し、{1,}と同じ|
|?|直前の式が0回か1回現れる、{0,1}と同じ|
|{n}|直前の式のn回の繰り返し|
|{m,}|直前の式のm回以上の繰り返し|
|{m,n}|直前の式のm回以上n回以下の繰り返し|

* サンプル [#Komidashi4]
サンプルのLEXファイルをいくつか同梱している。
|~ファイル名|~説明|
|SYNHLT.L|SMILE BASICのプログラムを簡易シンタックスハイライトさせるサンプル|
|SYNHLT2.L|ハイライト付きビューワ。Aボタンでカーソル下の関数定義に飛び、Bボタンで戻る。|
|SCANNER.L|SMILE BASICの字句解析器サンプル。[[Toukou/ソースコードチェッカー]]への組み込み用|

* 注意 [#Komidashi5]
- 開始条件、先読み演算子、<<EOF>>、複数行アクション、"|"のみのアクション、各種マクロは使えません。

* 修正履歴 [#Komidashi6]
- 2015/08/08 (土) 07:28:04 高速化。サンプル追加。
- 2017/01/12 (木) 22:43:53 サンプルのハイライト対象を最新版に合わせて修正。

* 公開キー [#QR]
プチコン3号用の公開キーです。トップメニューの「作品公開とダウンロード」から公開キーを入力すると、作品をダウンロードすることができます。
#ptcmid(2E3E43GJ)
#ptcmid(X5BEE8QE)
[[Toukou/正規表現ライブラリ]]と同じプロジェクトにまとめられている。プログラム本体はLEX。

* CHECKER FLAG (ひとことコメント) [#Comments]
この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は[[掲示板>Board]]へ)
- ''Pocky'' : ハイライトする為に使わせて頂いてもよろしいでしょうか? (&new{2015/08/08 (土) 15:59:13};)
- ''投稿者'' : 好きに使ってもらって構いません。ただ、これを使うとプログラムが無駄に長くなるので、自作したほうが良いかもしれません。 (&new{2015/08/08 (土) 19:09:32};)
- ''Pocky'' : ありがとうございます。長くなるかもしれませんが、正規表現で書けるという点が素晴らしいと思ったので(弄るのがとても簡単で) 使わせて頂きます。ありがとうございます。 (&new{2015/08/08 (土) 19:36:52};)
- ''syuto'' : SMILE IDE及びTOUCH-GRP内アプリフレームワークに使わせていただきます! (&new{2015/11/28 (土) 11:34:08};)
- ''名無しさん'' : 能力は人並み、問題は人間だなぁ (&new{2016/03/30 (水) 01:44:00};)

#comment

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.007 秒 | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30