我需要認識到在Fortran中的I4格式整數數組整數鏈(代表的寬度4的整數),如以下示例: 語義謂詞ANTLR不承認的寬度4
使用純上下文無關文法:
WS : ' ' ;
MINUS : '-' ;
DIGIT : '0'..'9' ;
int4:
WS WS (WS| MINUS) DIGIT
| WS (WS| MINUS) DIGIT DIGIT
| (WS| MINUS | DIGIT ) DIGIT DIGIT DIGIT
;
numbers
: int4*;
上面的例子是正確匹配:
然而如果使用語義謂詞來編碼的r語義約束ULE INT4:
int4
scope { int n; }
@init { $int4::n = 0; }
: ({$int4::n < 3}?=> WS {$int4::n++;})*
(MINUS {$int4::n++;})?
({$int4::n < 4}?=> DIGIT{$int4::n++;})+
{$int4::n == 4}?
;
它的工作原理爲INT4規則,但它不是數字的規則是相同的,因爲它不承認第一個例子中的整數數組:
在這種情況下可能會更好的純粹的上下文無關語法,但在格式I30(代表寬度爲30的整數)的情況下?
主要問題是:在語法中是否可以使用語義謂詞?
@BartKiers爲了更好地理解問題,我在幾分鐘前編輯了它 – Cyberguille
@BartKiers是的,但是當我在int4規則中添加了語義謂詞時,分析樹似乎以數字結束,因爲你請參閱解析樹的最後一張圖片 – Cyberguille