• 締切済み

Unixについて

大学のレポートで理解不能で困っています(>0<) 「Unixにはlexという字句解析用のプログラムがある。lexは正規表現を入力して与えると正規表現の照合を行うオートマトンを作ってそれをシュミレーションするcのプログラムを出力する。正規表現に合致する文字列が現れたときに実行すべき動作をcプログラムの形で与えることもできる。lexの仕様を調べてその実現方法を検討しなさい。」よろしくお願いします

みんなの回答

  • dd44
  • ベストアンサー率28% (151/521)
回答No.3

正規表現の分かりやすいページはこちら。 http://www.sixnine.net/regexp/ 「オートマトン」とは http://www.adachi.ne.jp/users/katz/primer/automata.html Cのプログラムは分かりますよね、そのまんまC言語のプログラムのことです。 あとはすでに回答されている内容で分かりますよね? 質問の意図がわかったら、それを調べて回答するのはあなたの役目です。がんばってください。

参考URL:
http://x68000.startshop.co.jp/~68user/unix/pickup?keyword=lex&target=command&partial=on&regexp=on&case=off
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.2

要するに、 「lex」というプログラムは、「正規表現(文字列)」を入力として、 「Cで書かれたプログラム」を出力します。 出力された「Cで書かれたプログラム」をコンパイルして動かすと、 それはオートマトンとして動作します。すなわち、入力された文字列が 最初に与えられた正規表現に合致するかどうかを調べます。

  • utf7
  • ベストアンサー率29% (11/37)
回答No.1

% man lex の出力結果が850行近くなりわかりにくいので、下記のURLを参考にして下さい。

参考URL:
http://x68000.startshop.co.jp/~68user/unix/

関連するQ&A

  • 正規表現について

    今lexのプログラムを書いているのですが、正規表現の部分でつまずいてしまいました。perlの正規表現なら分かるのですが、lexと少しかってが違い困っています。lexの正規表現でコメント(プログラム中で/**/で囲まれた部分)を読み飛ばす時には、どのような正規表現にしたら是非教えてください。なお/**/の中には文字列*/は出てこないと過程していいとのことでした。 解答お願い致します。

  • JLexの正規表現

    Jlex,JFlexを使って字句解析を行っているのですが、下の正規表現の意味がわからなくて困っています。 TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" この ~"*/" チルダが何をしているのかわかりません。 チルダを消して、字句解析すると / * コメント * / になるので、文字列の集まりとして扱っている気がしますが、正しいのかわからないので教えてください。

  • 正規表現を入力するとオートマトンを出力するプログラム

    大学の授業の課題で正規表現を入力するとオートマトンを出力するプログラムを書け、またはどのようなプログラムを作れば良いか説明せよ。という問題がでて困っています。 担当者の先生に質問したところ、参考書におおまかなプログラムの流れが載っていると言っていました。 その後、図書館などに行って調べたのですがオートマトンの定義や正規表現とはどういうものという感じのことしか書いてない本が多く、どのようなプログラムを作ればよいか全然わかりません。 やはり和書にはそのような本はないのでしょうか? アドバイスやおすすめの本があったらおねがいします。

  • UnixでのPathの表現方法

    ActivePerlを導入しPerlについて学ぼうと思ったのですが パスの表現方法の違いでいきなり躓いてしまいました・・・ UnixにはCドライブ、Dドライブという概念がない、ということですが D:\Program Files\Perl\bin\perl.exe このようなパスをUnixで表現するにはどうしたらよいのでしょうか? 具体的にいうと「D:\」の部分をどう表現するのでしょうか?

  • 最近勉強していて、pythonという言語はインデントを元にブロック構造

    最近勉強していて、pythonという言語はインデントを元にブロック構造を認識することができるらしいと知りました。 そこで疑問に思ったのですが、コンパイラは「字句解析」や「構文解析」といったステップがありますが、どのステップでブロック構造を認識できるのでしょうか。 予想では「構文解析」かと思ったのですが、正規表現では表せられないと思いました。 正規表現を使っていないだけなのかもしれませんが・・・ もしどのステップで認識するのか、分かる方がいらっしゃいましたら教えていただけると助かります。

  • UNIX系のシステムでカーソル選択のできるCUIプログラム

    UNIX系のシステムでカーソル選択のできるCUIプログラム UNIX系のOS一般で使えるCUIのプログラムの実装について知識が無いので質問します。 シェルスクリプト、C言語などで、数値計算する類のものは問題無く作れますが、 画面表示を行なって、それをカーソルで選択するようなインタフェースを持ったプログラムはどのように作れば良いのか知りたいと考えています。 例えば"A B C"とか表示して、選択しているものが白黒反転、 カーソル選択後エンターで選択して次の処理に移るようなものです。 ただ、出力して行くのはできるのですが、一つの画面を更新するような処理はどのように実装するのでしょうか。 シェルスクリプトが一番いいですが、JAVAなどでもとりあえず実現できれば構いませんのでサンプルになるようなプログラム、ページ、関数などあれば教えて下さい。

  • 携帯Javaで動くスクリプトエンジンの作り方

    シューティングにおいて、コンパイルなしで弾幕の動きをみるために スクリプトエンジンを作りたいのですが、難しくてうまくいきません。 携帯なので、ネイティブコードの呼び出しはできません。 言語はLuaにしようかと思っています。現在、字句解析はJavaの正規表現クラス(java.util.regex)を使って手書きし、構文解析にはCaperを使っています。現在抱えている問題は ・携帯Java(Doja5.1)には正規表現クラスがない Java1.4なのでenumとかもない ・字句解析がまだまだ不完全。ダブルクォーテーションの処理など(そもそも、このやり方で問題ないのか・・) ・cpgファイルも未完成。何とか変数に代入が出来るかってところ。 ・セマンティックアクションはどうすれば?本家のようにバイトコードを生成したりするのはアセンブリ言語の知識が必要で難しそう。 実用的な速度で動くならほかの方法でも。 ・白い弾幕くんなど、採用例が多いらしいのでLuaにしたが、ほかの言語のほうがいいのか?io-languageとか。 後でJavaのソースコードとcpgをアップします。

  • 任意の関数を読み込む

    プログラムに関して全くの初心者なんですが・・・  よくプログラムで計算をするときに、あらかじめコードに式を書いて、実行画面でパラメータを代入して計算をするって方法がありますよね~本である程度勉強してそれは出来るのですが、実行画面で、任意の関数を書いて、それを読み込んでくれるプログラムを作るっていうのは難しいのでしょうか?昔、字句解析ってやつを見た事があるのですが、ちんぷんかんぷんでした・・・ 何か簡単な方法、もしくは、よいHPがあればおしえていただけませんか?ちなみにC++Builderをつかっています。 宜しくお願いします。

  • ガウスノイズについて

    入力信号に正規乱数を付加させてシュミレーションを行うプログラムを作ってます。ボックスミューラー法で正規乱数を発生させようと思うのですが、この正規乱数は入力信号にどのように依存するのですか? σなどのパラメータをどう決めたら良いかわかりません。 ちなみにC言語を使ってます。

  • C言語

     C言語で「正規表現」プログラムしたいです。  「[0-9]」や「[a-z]」の検知をどのようにプログラムしたらいいかアドバイスください。

専門家に質問してみよう