【问题标题】:tcl error : extra characters after close-bracetcl 错误:大括号后的多余字符
【发布时间】:2014-02-26 14:48:03
【问题描述】:

在尝试调试此“大括号后的额外字符”错误时遇到问题。错误消息指向我的 proc 行...我 2 天都看不到它!

# {{{ MAIN PROGRAM
proc MAIN_PROGRAM  { INPUT_GDS_OASIS_FILE  L   CELL_LIST_FILE        }     {

    if { [file exists $CELL_LIST_FILE] == 0 } {
        set celllist [$L cells]
    } else {
        set fp [open $CELL_LIST_FILE r]
        set file_data [read $fp]
        close $fp
        set celllist [split $file_data "\n"]
        set totalcells [expr [llength $celllist] - 1]
    }

    set counter 0
    foreach cell $celllist {
        set counter [expr {$counter + 1}]
        set value [string length $cell] 
        set value3 [regexp {\$} $cell]
        if { $value > 0 && $value2 == 0 && $value3 == 0 }  {
            #   EXTRACT BOUNDRARY SIZE FIRST
            puts "INFO -- READING Num : $counter/$totalcells -- $cell ..." 
            ONEIP_EXTRACT_BOUNDARY_SIZE $cell $L "IP_SIZE/$cell.txt" 
            exec gzip -f "IP_SIZE/$cell.txt"
        }
    }
    # }}}
}
# }}}

【问题讨论】:

    标签: tcl


    【解决方案1】:

    这似乎是在 cmets 中使用大括号的不幸案例。 Tcl 解析器查看大括号 before cmets (http://tcl.tk/man/tcl8.5/TclCmd/Tcl.htm)。如果在 cmets 中放置大括号会导致打开/关闭大括号的数量不匹配,则会出现问题。

    尝试使用不同的评论风格,并从您的 cmets 中删除“{{{”和“}}}”。

    【讨论】:

      【解决方案2】:

      我很确定这取决于 proc 主体内 cmets 中的大括号。
      wiki 页面here 有一个很好的解释。简而言之,Tcl 注释不像大多数其他语言的注释,并且其中包含不匹配的大括号会导致所有 各种问题。

      因此,就在 proc 结束之前,#}}} 中的大括号可能是问题所在。

      【讨论】:

      • 谢谢,我还以为这只是个评论!!
      【解决方案3】:

      Tcl 要求过程主体是大括号平衡的,即使在 cmets 中也是如此。

      好吧,这完全是谎言。 Tcl 确实要求 大括号引用的字符串 是大括号平衡的(Tcl 的大括号引用的字符串就像 bash 中的单引号字符串,除了它们嵌套)。 proc 命令只是将它的第三个参数解释为一个脚本(用于定义过程主体),并且在这种情况下使用大括号引用的字符串是很常见的。这是 Tcl 通用语法的一个特性,也是 Tcl 确实非常擅长处理 DSL 之类的事情的原因。

      你可以这样做:

      proc brace-demo args "puts hi; # {{{"
      brace-demo do it yeah
      

      这样就可以了。完全合法的 Tcl,并且在带有不平衡大括号的程序主体中有注释。碰巧的是,对于几乎任何真实的过程,过早地添加所有必需的反斜杠来停止解释变量和命令替换是完全不能接受的。为了简单起见,每个人都使用大括号,因此必须平衡它们。

      除了偶尔对 cme​​ts 来说,这几乎不是问题。

      【讨论】:

      • 每天都在学习新东西……我想我更喜欢 perl
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 2015-04-28
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多