假设有以下代码
|- 插入符号
function a () {
let b = 20;
|
}
在这种情况下,很容易写块选择算法,{ let b = 20 }只要先向右或向左,找到开/闭括号的位置,使其counter等于 1,然后反方向走,增加或减少计数器,取决于下次遇到哪个括号以及何时发生 0 表示该块已关闭。
这也适用于{ | {} {} {} }
但它不起作用{ {} | {} },在这种情况下怎么办?有没有不将整个代码拆分为令牌、块分配、ast 等的解决方案?那么解决这个问题的最佳方法是什么?
好吧,为什么它不起作用?
左括号是+1,右括号是-1。我们在你的情况下向左走,我们得到一个序列(我在处理每个括号后写下值)-1、0、+1。大家,住手!+1 - 找到所需的左括号。
我们向右走,+1。进一步 - +2、+1、+2、+1、0。停止!0 - 找到一个右括号。
例如,如果注释或字符串文字中有括号,则不起作用。这是你需要进一步观察的地方......