また、実際に字句解析/構文解析を利用して実装されたテキストパーサ等があったら教えてください。
あと使用できる言語はPerlとJavascriptで、独自記法のパーサはPerlで実装しようと思ってます。
簡単に言うと
字句解析:文字列をトークン単位に区切ること
構文解析:区切られたトークンの並びからその文法を解釈すること
昔は字句解析はlex、構文解析はyaccで行っていました
http://www.amazon.co.jp/lex-yacc%E3%83%97%E3%83%AD%E3%82%B0%E3%8...
実際に字句解析/構文解析を利用して実装されたテキストパーサは多分ほとんどのプログラムで行われているはずです
全てのコンパイラ、スクリプト、SQL、XML、HTML、LaTeX
ちょっと考えただけでこれだけあります。
ちなみにperlでの構文解析器です
http://www-06.ibm.com/jp/developerworks/linux/000728/j_perl-pars...
ま、単純なものであれば
if ($文字列 =~ /パターン/) {
なんか処理
}
を連ねていけばいいと思いますが、エスケープ処理やコメントがあったりするととたんに面倒になります
http://ja.wikipedia.org/wiki/%E5%AD%97%E5%8F%A5%E8%A7%A3%E6%9E%9...
http://ja.wikipedia.org/wiki/%E6%A7%8B%E6%96%87%E8%A7%A3%E6%9E%9...
紹介されたWikipediaのページ見てみましたが字句解析/構文解析のさわりだけで、踏み込んだ内容までは無かったですね。
C言語で字句解析・構文解析を行う際に使われるツールにyaccとlexがあります。それらに関する書籍やウェブページが参考になるかもしれません。
また、id:jkondoさんのText::Hatenaがまさにはてな記法の構文解析を行い、その結果を元にHTMLを生成しており、かつPerlで記述されていますので、参考になると思います。
やっぱり字句解析/構文解析するとなるとlex/yaccあたりについて調べることになるんですね。
あとText::Hatenaはソース読んだ事はあるんですが、字句解析はやってなくて、テキストを一行ずつ読んで処理する、という感じでした。
簡単に言うと
字句解析:文字列をトークン単位に区切ること
構文解析:区切られたトークンの並びからその文法を解釈すること
昔は字句解析はlex、構文解析はyaccで行っていました
http://www.amazon.co.jp/lex-yacc%E3%83%97%E3%83%AD%E3%82%B0%E3%8...
実際に字句解析/構文解析を利用して実装されたテキストパーサは多分ほとんどのプログラムで行われているはずです
全てのコンパイラ、スクリプト、SQL、XML、HTML、LaTeX
ちょっと考えただけでこれだけあります。
ちなみにperlでの構文解析器です
http://www-06.ibm.com/jp/developerworks/linux/000728/j_perl-pars...
ま、単純なものであれば
if ($文字列 =~ /パターン/) {
なんか処理
}
を連ねていけばいいと思いますが、エスケープ処理やコメントがあったりするととたんに面倒になります
> ちなみにperlでの構文解析器です
のリンク先で紹介されているParse::RecDescentは使ったことがあるんですが、なかなかうまくいかなかったです。
字句解析/構文解析の概念は分かってきたのですが、具体的にどうやっていけばいいかがよく分からないんですよね。
なんか良い書物は無いでしょうか?
字句解析/構文解析の概念は分かってきたのですが、具体的にどうやっていけばいいかがよく分からないんですよね。
なんか良い書物は無いでしょうか?
dev_zer0さんが紹介されている書籍に詳しく書かれているのですが、今では手に入り難いようですので(私は捨ててしまった(^^;)、「Amazon.co.jp: Rubyを256倍使うための本 無道編: 本: 青木 峰郎」はいかがでしょうか?
Raccの解説書ですが、構文解析についてわかり易く書かれているので参考になると思います。
参考にしてみます。
実際に字句解析/構文解析を利用して実装されたテキストパーサ等があったら教えてください。
PerlでもJavascriptでもなくRuby(Racc)での実装ですが、簡単なのを一つ。
おお、色々見てみます。
> ちなみにperlでの構文解析器です
のリンク先で紹介されているParse::RecDescentは使ったことがあるんですが、なかなかうまくいかなかったです。
字句解析/構文解析の概念は分かってきたのですが、具体的にどうやっていけばいいかがよく分からないんですよね。
なんか良い書物は無いでしょうか?