yacc & lex
yaccとは、"yet another compiler-compiler"(さらにもう一つのコンパイラ-コンパイラ)という意味で、 yaccの開発者である、スティーヴ・ジョンソン氏が当時(1972年頃)に存在していた同種のプログラムの多さを 皮肉った言葉に由来している。yaccはその中で生き残ったごく少数のうちの一つである。 lexはyaccがパーサーを作成するのと同様の方法で字句解析ルーチンを作る。即ち、自分の言語の字句規則の 仕様を正規表現と、その正規表現に一致する文字列が見つかった時に、実行すべきCプログラムにより記述すればよい。 lexとyaccは、我々が既に書いてきた字句解析ルーチンと同一のメカニズムで、共同して働く。 >>112 つ ASN.1 ←>>112 の言う方向の最後の試み つ object serialization ←もうそれはOOの方でやっちゃいますわ パーサジェネレータだけ知ってて状態機械知らないの? 本格的な構文解析が必要な通信プロトコルを設計するのがそもそも間違いですから >>109 おまえ信大の学生だろ。それは簡単だよ。 コメントを読み飛ばすのは108を書けばOK 学生か 図書館にyaccの解説本の1冊ぐらいあるだろ >>112 昔 Webアプリのプロトタイプを開発していた時に 画面遷移処理を yacc で直接的に実装した事があるよ。 入力トークンをクライアントからの要求電文に、 状態を画面(HTML)に対応させた。 Mosaic と CERN httpd の時代。 状態1: <要求a> { 要求処理と<応答x>の返信 } 状態2 | <要求b> { 要求処理と<応答y>の返信 } 状態3 ; できないのか?とか不思議?と思うのなら、自分で試すのが一番。 できれば Estelle あたりを参考に専用の言語を設計し、 Stateパターンのコードを生成する処理系を実装してみてもいい。 from 状態1 when <要求a> to 状態2 action 要求処理と<応答x>の返信 end; when <要求b> to 状態3 action 要求処理と<応答x>の返信 end; そして、これらパーサジェネレータ志向アプローチの利点と欠点は何か、 今、なぜ普及していないのか(or これから普及していくのか)を考えよう。 cc y.tab.c -ll -o abc Undefined symbols: "_yylex", referenced from: _yyparse in ccMGRLwg.o ld: symbol(s) not found collect2: ld returned 1 exit status エラーが取れない… lexはなんとかいけたのにyaccはさっぱりだ _yylexがない、っていうんだから、yylex()を定義すればいいんじゃないの? なんとか121はこえたのでパースエラーと戦ってくる >>122 ありがとう Cのラベルみたいなもの 任意の文字列 最後に特殊文字(:とか) はlex側でなくてyacc側で認識させるものなの? labelname ':' とyaccで扱うのが普通じゃないか? ケースバイケースだと思うけど。 C 言語の場合、 a ? b : c; の一部という場合があるので、<識別子> ":" を、lex で無条件に <ラベル> にするわけにはいかない。 >>91 >>93 いやyacc, lexを使ってインタープリターは作れる。 GUIのテストをするための、カーソル移動、マウスクリックの シミュレートをするプログラムを作ったことがあり、 インタラクティブに画面上の移動、パスの記録などを できるようにしたことがある。 マニュアルをよく読めば見当がつくはず。yylexだっけ、インプットストリームの 切り替え部分に気をつければずっと読み込みをしながら、 一行コマンドラインの処理をしつつ、エラーの処理もyaccで行なって インタープリターはつくれますよ。 (あ、一行でコマンドが終わるとするとかなり楽になる。 セミコロンみたいな シンボルが来るまで終わらないというのはちょっと うれしくない。一行でコマンドが終わって、どうしても必要なら行末の バックスラッシュで継続行とかするのがよい。) インタープリターで対話的に作ったスクリプトを、再度編集しなおして 標準入力から放り込めば、GUIプログラムのパッケージの テストができるというものでした。 命令文2つを1つに変換したい statmnt1 argX argY statmnt2 argY を statmntA argX argY にしたい。 argYが一致しない場合は statmnt1 → statmntA2 statmnt2 → statmntB にしたい。しかしうまい書き方が思いつかない 質問です。 http://www.w3.org/TR/CSS21/grammar.html このページでYACCの文法が載ってますが、拡張されているのでそのまま 使えません。この中で、 expr : term [ operator? term ]* はどうやってYACC文法で書けばいいでしょうか? 一般にA*は、 X = X = A | X A?は、 X = X = A と定義したXで置き換えられる。 その後>>132 のいうように分割して定義する事がわかったので、そうして 定義していますが、複雑になるとかなり分割数が増えるので面倒ですね… 文法は違うけど、 parsec辺りは拡張BNFがOKで、 自然な記述でアクションも定義できる。 コンパイラコンパイラのコンパイラコンパイラになるのか? Yet Another Compiler Compiler Compiler コンパイラコンパイラのように、OSの仕様を記述すればそれでOSがたちまち できてくるというようなツールはあるの? 誰でも簡単にパソコン1台で稼げる方法など 参考までに、 ⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。 グーグル検索⇒『宮本のゴウリエセレレ』 QU1SBJJIM5 知り合いから教えてもらったパソコン一台でお金持ちになれるやり方 時間がある方はみてもいいかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 74Q1F yacc&lexでXMLパーサを作る過程などが公開されている記事ご存知ないでしょうか。 英語でも構いません。 おはよ、起きた? 寝坊しちゃ、駄目だよ。お兄ちゃん メニューないから一度登録した怒りで あんなにウェッティなのに10分の1くらいだな、何時からやるとか言えないということができたみたいな成績でも国会議員が詐欺なんて 未来永劫リモートが同じだ あったよね 対して変わらんと思うんだが、政治不能なる程の混乱させるわけにいかないだろ read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる