作者macbuntu (邀怪)
看板java
标题Re: [问题] super field access 的 qualifier ?
时间Tue May 19 18:13:30 2009
※ 引述《Senkousha ( )》之铭言:
: 在 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 这样的语法,
我猜你是因为 java1.5.jj 里的注解所以去看 JLS 15.11.2 的吧 ;P
这个地方也曾经困扰我, 尤其 java1.5.jj 的注解说是为了 15.11.2 的需要才加上
那一条规则... 但是 15.11.2 只说 T.super.name 的 T 在语意上的意义, 没有强调
语法. 而从 JLS 最後面的 grammar 来看, T 好像不可能出现包含 type argument
的状况, 所以用 ClassOrInterfaceType() 感觉不大好, 而 eclipse 的 ClassName
比较好.
把 Java1.5.jj 里的 ClassOrInterfaceType() "." "super" "." <IDENTIFIER> 拿掉,
光靠 PrimaryPrefix 跟 PrimarySuffix 就可以 parse 出跟 eclipse 一样的结果,
所以那行感觉上是一整个不必要, 我也想不透当初加进去的原因.
话说回来, parser grammar 本来就不需要太严格, 对语法错误接受度比较宽松的
parser 往往可以让 compiler 在後面阶段产生比较有意义的错误讯息,
从这个角度看, 多个 ClassOrInterfaceType() 其实也没什麽关系吧.
: 请问在哪里可以找到这种相关的讨论? ~"~
我也想知道咩...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.136.91.132
1F:推 PsMonkey:大部分人只会写,不想知道细节(by 看不懂内容的版主 XD 05/19 19:34
2F:推 Senkousha:会用到这个应该纯粹是因为在作parser XD 05/20 04:25
3F:推 Senkousha:那个 danson 加的两块好像都是错的啊 -___- 05/20 04:57