2012-12-01 31 views
3

這裏是例子。這個($ type)不被ANTLR4識別。

Number //options { backtrack=true; } 
    : IntegerLiteral { $type = IntegerLiteral; } 
    | FloatLiteral { $type = FloatLiteral; } 
    | IntegerLiteral { $type = IntegerLiteral; } 
    ; 

這可以替換爲什麼?

謝謝。

+0

你能接受280Z28的答案嗎?這是首選的方式(不依賴於目標)。 –

回答

2

在ANTLR V4,這樣做:

Number 
: IntegerLiteral {setType(IntegerLiteral);} 
| ... 
5

在ANTLR 4,這是新的語法:

Foo 
    : Bar -> type(SomeType) 
    | ... 
    ; 

但是,你有你上面的規則應該只是刪除Number規則確保FloatLiteralIntegerLiteral規則不是分段規則。

+0

啊,是的,我知道我在Terence的新書中縮短了一些東西。也許提到' - >'不是舊v3人的AST重寫操作符? :) –

+0

@ 280Z28你是什麼意思的「只刪除'數字'規則」和不碎的規則?你能否爲我澄清這一點,因爲這有我的問題的答案 –