我在Windows XP(版本5.1.2600)上使用來自活動狀態的Perl版本5.12.4。安裝了ParseLex 2.20。 嘗試從Apress的Pro Perl解析書中運行此代碼。無法使用Parse :: Lex解析:: 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->名稱& $ token-> text。 我在這裏錯過了什麼?請幫忙。
根據亞歷山大的建議,我已將代碼更改爲$ lexer-> from(* STDIN);並且能夠成功從stdin中讀取數據,並且改變了Number [( - ?\ d +)|( - ?\ d +。\ d *)]現在當我向STDIN提供43.4 * 15^2時,我得到的輸出是:
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行是print $ token-> name,「」,$ token-> text,「\ n」。
你試圖解析什麼輸入? – bvr
我的輸入是43.4 * 15^2。 –
錯誤是由輸入字符串中的換行符引起的。我建議添加'WS \ s +'標記來解析這些標記。 – bvr