可选尾随逗号的缺点是什么?

时间:2016-04-17 20:25:50

标签: parsing grammar

许多语言在语法中都有以下几个规则,禁止使用尾随逗号:

call-expr: ident '(' expr-list? ')';
expr-list: expr | expr-list ',' expr;

但是,以下公式允许(但不要求)尾随逗号,其中包含well-known advantages

call-expr: ident '(' expr-list? expr? ')';
expr-list: expr ',' | expr-list expr ',';

是否有任何缺点总是使用它,至少在内部?

2 个答案:

答案 0 :(得分:1)

缺点是允许空条目的含糊不清。考虑Javascript中的以下数组:

  • [1,,3]
  • [1,,3,]

它们相同吗?它们的长度是否相同?应该是吗? (答案:是的,但不是IE< = 7)

答案 1 :(得分:1)

允许保留过程参数的语言(我特别想到旧的HP系统语言SPL;可能还有其他语言)会因此失败,因为编译器会假设在跳过参数之后该过程不需要的尾随逗号。我承认这是一个小缺点 - 另一方面,IMO所述的利益同样很小。