Delphi 用 TP Lex/Yacc ライブラリ ver 2002.2.25 written by Osamu TAKEUCHI http://www2.big.or.jp/~osamu/ Lex/Yacc は、コンパイラーやそれに類似したテキスト処理ユーティリティ、コマンド インタプリータを作るためのツールです。文法定義ファイルを読み込み PASCAL コードを 出力します。 この配布ファイルは Turbo Pascal (TM) 向けに開発された TP Lex/Yacc を Delphi と ともに使うためのコードテンプレートとライブラリのセットです。 TP Lex/Yacc は現在 http://www.musikwissenschaft.uni-mainz.de/~ag/tply/tply.html から tply41a.zip という名前でフリーソフトとして入手可能です。 http://www.idiom.com/free-compilers/LANG/Lex-1.html からたどれる旧バージョン ftp://iecc.com/pub/file/lyprg.zip の中のドキュメントを日本語訳した TPLexYacc.txt が 同梱されています。参考になれば幸いです。 この配布に含まれるファイルは、 <ドキュメント> ReadMe.txt このファイル TPLexYacc.txt 旧バージョン TP Lex/Yacc ドキュメントの日本語訳 <テンプレート・ライブラリ> yylex.cod Lex 用コードテンプレート yyparse.cod Yacc 用コードテンプレート LexLib.pas Yacc ライブラリ(仮想) LexLib_Stream.pas Yacc ライブラリ(実装) YaccLib.pas Yacc ライブラリ <サンプル> Expr.* プロジェクトファイル MainFm.* メインフォーム ExprLex.l Lex 入力ファイル ExprYacc.y Yacc 入力ファイル です。 テンプレート・ライブラリファイルを TP Lex/Yacc のものと差し替えて使うことにより、 TP Lex/Yacc は Delphi 用の語彙解析クラス/パーサクラスを出力するようになります。 TP Lex/Yacc についての詳しい説明は TPLexYacc.txt を参照してください。 テンプレート・ライブラリの使い方については各ファイルのコメント、及び生成される PAS ファイルを参照してください。 以下で、付属のサンプルをコンパイルする方法を説明します。 コマンドラインから、 lex ExprLex yacc ExprYacc Delphi から Expr.dpr を開いてコンパイル これだけです。 Expr.exe を実行すると2つの TEdit が現れます。左の Edit に数式を入力して Enter を 押すことで左に計算結果が表示されます。A 〜 Z までの1文字変数も使うことができます。 例: x=1+2*3 X=7 y=(1+2)*3 Y=9 z=1*-2 Z=-2 7+9+-2 14 x+y+z 14 これだけのことが ExprLex.l/ExprYacc.y に記述したわずかな行数でできてしまうのは Lex/Yacc を始めて見た人にとっては大きな驚きではないでしょうか? 履歴: 2001.1.28 初版 2002.2.25 LexLib_Stream.pas の function TLexBase.get_char: Char; を修正 初めてまともに動くようになった!?