タグ

Perlとparserに関するhiroyukimのブックマーク (2)

  • Perl で簡単にパーザを書く - tokuhirom's blog

    パーザを書こうという場合、Parse::RecDecsent のようなモジュールを使うのが一般的だが、Perl5 の正規表現は強力すぎるため、そんなものに頼らなくても超絶簡単にパーザを実装することが可能だ。 以下に、四則演算のパーザを示す。 use 5.018000; package Calc { use Carp (); sub parse { local $_ = $_[1]; _parse_expr(); } sub err { my ($msg) = @_; my $ret = join('', $_, "\n", (" " x pos()) . "^\n", $msg, "\n", ); Carp::croak $ret; } sub _parse_expr { my @nodes; until (/\G\s*\z/gc) { my $m = _parse_add() or do

  • Parse::RecDescent 使ってみた - amari3の日記

    最近、字句解析やら構文解析に興味があるので、perl の強力なパーサ Parse::RecDescent を使ってみた。まずは簡単に足し算の文法を考えてみる。 バッカス・ナウア記法を使って書いていますが、勉強を始めたばかりなので誤りがあるかもしれません。 expression ::= atom + expression | atom atom ::= [0-9]+ expression の定義 atom + expression もしくは atom atom の定義 0〜9の1回以上の繰り返し これを、Parse::RecDescent を使って実装したのが、以下のソースコードとなる。 #!/usr/bin/env perl use strict; use warnings; use feature qw/say/; use Parse::RecDescent; my $grammar =

    Parse::RecDescent 使ってみた - amari3の日記
  • 1