2
は、次のようにテキストを解析が必要:Pegex文法の設計
optional free text
@somemacro1(optional free text
@somemacro2(SOME TEXT)@ or other optional free text
)@
another free text
例えばそれは基本的には非常に簡単です:
- ソースは、フォームにいくつかのマクロが含まれている可能性がフリーテキスト
- ある
@MACRONAME(
一部のコンテンツ)@
- 一部のコンテンツが再びフリーテキストであるている可能性いくつかのマクロを含む - 例えばマクロは
解析されたマクロの結果は、(マクロ名に基づいて)いくつかの文字列である(上記の例を参照)
問題は:誰かが上記のためにPegex-grammarを手伝ってもらえますか?
私がすでに試したことを誰かが疑問に思っています、ここでは私のテストソースです - 動作していません。 :(ここ
package Rec {
use 5.014;
use warnings;
use base 'Pegex::Receiver';
use Data::Dumper;
sub gotrule {
my($self, $got) = @_;
say "Got rule:", $self->{rule};
return "GOT" . $self->{rule} . "RULE";
}
}
use 5.014;
use warnings;
use Data::Dumper;
use Pegex::Parser;
use Pegex::Grammar;
my $source = <<'EOF';
free text
@somemacro1(optional free text
@somemacro2(SOME TEXT)@ or other optional free text
)@
another free text
EOF
my $grammar_text = do {local $/; <DATA>};
my $grammar = Pegex::Grammar->new(text => $grammar_text);
my $receiver = Rec->new;
my $parser = Pegex::Parser->new(grammar => $grammar, receiver => $receiver);
my $input = Pegex::Input->new(string => $source);
my $ret = $parser->parse($input);
__DATA__
%grammar test
%version 0.0.1
start: seq*
seq: | macro
| text
macro: /AT macro-name LPAREN content RPAREN AT/
macro-name:/WORD+/
text: /ALL*/
content: /ALL*/
YESああ、メインのトリックは '(マクロ開始です! ) ' - 本当にクール。どういうわけか - 私が読んだものはすべてのpegex文法を理解していますが、私は自分自身を作り出すことはできません。もし私ができれば - 特に新しいStackOverflowユーザーの場合);)。 – Nemo
さらに 'Pegex'の質問がある場合は、**#pegex ** channel of Freenode IRCにアクセスしてください。 – vicash