Windows XP(バージョン5.1.2600)でアクティブ状態のPerlバージョン5.12.4を使用しています.Installed ParseLex 2.20。 ApressのPro Perl Parsingの本からこのコードを実行しようとしています。はParse :: Lexを使用して解析できません
#!/usr/bin/perl
use Parse::Lex;
#defines the tokens
@token=qw(
BegParen [\(]
EndParen [\)]
Operator [-+*/^]
Number [-?\d+|-?\d+\.\d*]
);
$lexer=Parse::Lex->new(@token); #Specifies the lexer
$lexer->from(STDIN); #Specifies the input source
TOKEN:
while(1){ #1 will be returned unless EOI
$token=$lexer->next;
if(not $lexer->eoi){
print $token->name . " " . $token->text . " " . "\n";
}
else {last TOKEN;}
}
これは機能しなかったので、私はNumber [ - ?\ d +]で簡略化しました。 "メソッド名"を "未定義の値"で呼び出せません。$ token-> name & $ token-> textは認識されません。 ここには何が欠けていますか?助けてください。
Alexandarの提案によれば、コードを$ lexer-> from(* STDIN)に変更しました。 ([? - \ d +] |( - ?\ d +。\ d *)]を変更しました)今、私が43.4 * 15^2をSTDINに送りたときに得られる出力は
Number 4
Number 3
Number .
Number 4
Operator *
Number 1
Number 5
Operator^
Number 2
Can't call method "name" on an undefined value at listing1-1.pl line 20, <STDIN>.
ここで、20行目は$ token-> name、 ""、$ token-> text、 "\ n"を出力します。
$lexer->from(\*STDIN);
更新フルコード:|
あなたはどのような入力を解析しようとしていますか? – bvr
私の入力は43.4 * 15^2です。 –
エラーは、入力文字列の改行によって発生します。これらを解析するためにWS \ s + 'トークンを追加することをお勧めします。 – bvr