SCC 在 LineJudge 中的代表和参与
linejudge 是什么的 linejudge 维护着许多小源文件的集合,每个文件围绕着一个会让计数器出错的事情而构建:在注释开头前有一个转义引号,一个嵌套的块注释,一个字符串带有自己的分隔符,一行被反斜线连接到下一行,文件中包含第二种语言等等。每个测试文件都附带了记录,记录了每个字符串和注释的开始和结束位置,根据语言的规范或词法分析器,并且总是手动验证。 linejudge 还包含了围绕它的工具:它下载每个计数器的二进制文件,对每个案例进行运行,保存它的答案,以便一个版本可以与下一个版本进行比较,逐行解释每个案例的每一行,并将结果渲染到一个 公共网页。 该记录是客观的一半:字符串或注释的开始和结束位置是由语言确定的,并且无论哪个计数器询问,情况都是一样的。然后如何计数行是没有客观正确答案的一半:计数器之间存在分歧,因为它们按照不同的规则进行计数,而且大多数这些规则都是可辩护的。因此,计数器从来没有被与另一个计数器相比,也从来没有被与预先确定的正确计数相比。每个计数器都有一个拟声词文件,声明了它按照哪些规则进行计数。从这些规则和记录中,套件可以确定该计数器在每个文件上应做出什么回答,然后运行计数器并进行比较。 失败意味着只有一件事:计数器没有按照其自身规则所做的。
如何表示 scc。 scc 的拟声词文件是 dialects/scc/default.toml。我是从您的文档中编写的,从有限的源代码阅读中得出的,以及从我对程序行为的观察中得出的,因此这是我对 scc 计数方式的最佳理解,并且在某些地方可能是错误的。该文件是我要求您检查的内容。 mezura 以同样的方式进行测量,并且失败了其自身的案例。 如何阅读它。 每个 [[规则]] 将行分类为 scc 的三个"桶"之一,即"代码"、"注释"或"空白"。 when 是条件,是一系列必须为真的是否的问题,其中 ! 表示否。 in-string 询问一个字符串是否覆盖了行的一部分, has-residue 询问除了空格之外,是否还有其他内容位于每个字符串和注释之外,等等。 七个问题在 … 中定义。
内容来源: boyter/scc