有没有办法找到代码块结束的行号
示例:用于以下输入
21) synchronized(Lock.class){
22) a.getAndIncrement(); //some code
23)
24) }
相应的AST是
synchronized
PARENTESIZED_EXPR
EXPR
.
Lock
class
BLOCK_SCOPE
EXPR
METHOD_CALL
.
g
getAndIncrement
ARGUMENT_LIST
对于上面的代码,给定CommonTree有任何方法可以检索“synchronized”块结束的行号。上述代码的输出应为24(因为同步块在第24行结束)。
答案 0 :(得分:1)
是的,通过以下技术:
}
。
->
,则表示}
令牌需要显示在右侧。^
和!
,则表示您无法在!
令牌上使用}
运算符。CommonTree
令牌对应的}
,并在令牌上调用getLine()
以获取行号。 编辑:以下是语法中的当前block
规则:
block
: LCURLY blockStatement* RCURLY
-> ^(BLOCK_SCOPE[$LCURLY, "BLOCK_SCOPE"] blockStatement*)
;
如您所见,重写规则不包含RCURLY
标记,因此省略了有关块结尾位置的信息。可以修改规则以包含令牌:
block
: LCURLY blockStatement* RCURLY
-> ^(BLOCK_SCOPE[$LCURLY, "BLOCK_SCOPE"] blockStatement* RCURLY)
;
请注意,这也需要更新树语法中的相应内容。
block
: ^(BLOCK_SCOPE blockStatement* RCURLY)
;