我正在写一个.sublime-syntax for the Specman language,需要多行方法声明的帮助。
使用关键字is
声明方法,该关键字位于方法声明的大多数其他部分之后。
E.g。
fwd_init() @driver.clock is {
或
add(x : uint, y : uint) is also {
或
private do_stuff(field : my_type) is only {
等...
我的问题是,如果将大量参数传递给方法,声明的部分可能会很长,所以我倾向于将该行拆分为多行。
我无法匹配方法的语法,因为我需要多行匹配。
以下是我目前的情况,但它不起作用:
methods:
- match: (?=^\s*(?:private|static|final)?\s+[a-zA-Z](?:[a-zA-Z0-9_]+)?\s*\()
set:
- match: (?=\bis\b)
push: method-declaration
基本上我想回到前瞻,可能匹配该函数,以防它不是一个函数弹出它。
答案 0 :(得分:1)
当我写下我意识到的问题时,我需要做的就是将method-declaration
推到堆栈上,首先对is
做一个否定的预测。
如下:
methods:
- match: (?=^\s*(?:private|static|final)?\s+[a-zA-Z](?:[a-zA-Z0-9_]+)?\s*\()
push: method-declaration
method-declaration:
- match: (?!is(?:\s+)(only|first|also)?)
pop: true
- ... parsing of the method declaration
希望这可以帮助其他人寻找有关该主题的信息。