推断括号的开/闭状态?

4
似乎有人已经在研究如何推断或建议放置闭合括号。我的意思是,突出显示匹配的括号很好,但提供建议会更好。这是一个已定义的问题吗?如果是,它的名称是什么(就像我应该在Google学术中搜索什么)?如果不是,为什么不是?这是一个显然不可能/错误提出的问题吗?
例如,假设我有一些格式不正确的ruby代码:
foo.all.map { |i| i.bar }).uniq.compact.reject { |j| j.match /baz/i }

请注意,我遗漏了初始括号。我所讨论的问题是,“当我将光标移到未成对的括号上方时,如何建议在开头插入一个括号?”如果这不是一个问题陈述不清的问题,为什么还没有人做过呢?

你能举一个或两个例子来说明这个建议是如何工作的吗? - NPE
有一些编辑器/IDE,例如Vim和Eclipse,在您键入左括号后会自动添加右括号。但我相信这不是您想象的情况 :) - kol
1
它被称为运算符优先级。它甚至比你所描述的更好,因为它是正式定义的(大多数语言都有明确的运算符优先级表),易于遵循和掌握,甚至可以推断出开括号。 - user395760
增加了示例。我不仅是在谈论自动关闭打开的括号,我还在谈论建议在哪里插入闭合括号。 - aresnick
1个回答

0

当用户输入时,可以跟踪“平衡”与“不平衡”的括号。然后在括号变得不平衡时建议一个括号。

例如,输入(something))会在s之前建议一个开括号。正确地放置“修复”括号可能具有挑战性。例如,如果用户键入something(else)),则有一个选择:在g之后插入修复的开括号还是在字符串开头?

跟踪平衡括号将相对简单:

int parenCount = 0

event keyUp(char c){
    if(c is close-paren){
        parenCount--;
    }else if(c is open-paren){
        parenCount++;
    }
    if(parenCount < 0){
        // missing an open-paren somewhere
    }
}

// handle missing close-parens when user finished typing the string...
// for example if user types "myObject.something(" and hits enter

可能还需要查找不必要的括号,例如a.doSomethingWith((aNumber))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接