作者Senkousha ( )
看板java
标题[问题] super field access 的 qualifier ?
时间Tue May 19 08:06:06 2009
在 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