[問題] super field access 的 qualifier ?
在 JLS 15.11.2:
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.11.2
裡面有提到如 T.super.name 這樣的 expression,
在 eclipse.jdt.core.dom 裡面是當作 SuperFieldAccess 像這樣來處理:
SuperFieldAccess:
[ ClassName . ] super . Identifier
而 ClassName 是一個 Name,不是 Type。
我的問題是,手邊有一份 javacc 4.2 裡的(2006?)範例文法 Java1.5.jj,
裡面在 parse primary expression 的 prefix 時,出現了這樣的 case:
ClassOrInterfaceType() "." "super" "." <IDENTIFIER>
其中的 ClassOrInterfaceType() 是個可以包含 type argument 的 Type:
<IDENTIFIER> [ TypeArguments() ] ( "." <IDENTIFIER> [ TypeArguments() ] )*
建出的 parser 也的確接受了 B<int>.super.field 這樣的語法,
這讓我有點想不通的地方是以下兩點:
1. 就算 class B 是一個 parameterized type ,B<TypeArg> 跟 B 有可能
對 super field access 造成影響嗎?畢竟可以存取的 super field
好像都是 static 的?
2. 在 javacc 的 Java1.5.jj 檔裡面,primary expression 是長這樣的:
PrimaryExpression ::= PrimaryPrefix ( PrimarySuffix )*
而 prefix 裡面除了上面提到的 case ,也有一個 case 是 Name(),
然後 suffix 裡面也有 .super (lookahead ".super."),
這樣基本上就跟 ClassOrInterfaceType() 裡面完全沒有 TypeArguments()
的 case 長得一模一樣了,那如果上面 1. 的結論是 type argument 沒有意義,
是不是可以說包含 ClassOrInterfaceType() 的這個 case 是多餘的呢?
大家覺得是 eclipse.jdt.core.dom 那邊的作法比較有道理,
還是覺得 eclipse 的 parser 應該也要吃 Type 比較好呢?
----
請問在哪裡可以找到這種相關的討論? ~"~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 169.232.171.165
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 3 篇):