我有一个编译器作业问题,希望我为Pascal评论绘制DFA,但我从来没有(也可能永远不会)使用Pascal.问题没有说明我们是否应该使用ANSI Pascal或Turbo Pascal,所以我打算为两者做一个.
一些谷歌搜索向我展示了Turbo Pascal允许嵌套注释,只要没有使用相同的分隔符{(*comment*)},所以可以(*{comment}*),但是,{{comment}}或者(*(*comment*)*)不好.我的问题是,如果评论喜欢{(*{comment}*)}或者(*{(*comment*)}*)没有问题,因为相同的分隔符不会连续使用.
我也用谷歌搜索ANSI Pascal是否允许嵌套注释,但我还没有找到明确的答案.如果ANSI Pascal允许嵌套注释,那么规则是什么?
另外,我并不担心不同的起始和结束分隔符的奇怪的注释约定,这是ANSI Pascal中允许的约定.
更新:
我想明确的是我并不关心特定编译器如何处理Pascal注释,我关心编译器应该如何处理Pascal注释,如果该编译器100%遵守ANSI或TURBO Pascal标准.
Rob*_*edy 12
ISO 7185:1990对§6.1.8中的评论说明了这一点:
其中一个评论应的字符和线中分离的任何序列,既不含}也不*),该构建体
('{'|'(*')评论('*)'|'}')
应该是一个评论,如果既不是{也不是(*发生字符串内或评论之内.
笔记
- 因此,评论可以从开始,
{结束*),开始(*和结束}.(*)即使序列可以,序列也不会出现在评论{)中.
据此,基本上只有一种评论.虽然您可以使用{或开始评论(*,但您不能使用不同的字符集来"包装"其他评论.另一方面,Turbo Pascal有两种注释,即使用大括号和使用括号的注释.
如果你有一个括号式的评论和其封装在一个括号风格注释创建(*{}*),ISO说,评论是(*{}用*)剩下的,这将是你的代码中的语法错误,而Turbo Pascal的说,评论是(*{}*)没有文字左过度.
这两种样式都不允许您在另一组注释分隔符中包装已包装的注释.那是因为一旦你发表评论,"内部"评论就不再被视为评论了.这只是普通的文字.如果你有{(**)},你想它包装在一个括号式的评论做出(*{(**)}*),ISO和Turbo Pascal的都表示注释是(*{(**)与}*)遗留下来的.
在fpc和objfpc模式下,Free Pascal支持嵌套注释,因此我最近的示例将被接受为没有剩余文本的有效注释.尽管如此,有关此事的FPC文件并未真正证明这一点.它给出了六个假设嵌套注释的例子:
{ Comment 1 (* comment 2 *) }
(* Comment 1 { comment 2 } *)
{ comment 1 // Comment 2 }
(* comment 1 // Comment 2 *)
// comment 1 (* comment 2 *)
// comment 1 { comment 2 }
但是我们已经建立的Turbo Pascal(或最后两行的Delphi)不支持嵌套,会接受所有这些作为完全有效的评论!FPC确实支持嵌套注释,但这些示例并没有说明它.以下是嵌套注释的一些示例:
{ Comment 1 { comment 2 } }
(* Comment 1 (* comment 2 *) *)
{ Comment 1 (* comment 2 { comment 3 } *) }
我甚至认为FPC的第三和第四个例子实际上是FPC支持嵌套注释的说法的反例.这两行不应该是完整的评论.在//该行的中间引入了不终止直到行(EOL)结束的注释.该EOL来后的}和*),所以内,斜线式的评论不能可能通过我们到达大括号或括号分隔符时终止.就像<a> <b> </a> </b>不正确嵌套的XML一样,我们有不正确的嵌套注释:{ // } EOL.
经过进一步的实验,我得出结论,在FPC中,只有相同类型的注释嵌套.例如,一旦你打开评论{,(*字符就不再是特殊的.FPC不会在大括号样式注释中打开括号样式的注释.如果确实如此,则{(*}由于未终止的括号注释而导致语法错误.我们可以通过说当评论是异构的时候终止内部评论是可选的来解释这一点,但是说内部评论根本没有被检测为评论是一个更简单的解释.一旦你打开括号式评论,只有大括号有意义.此外,//当它在括号内时,实际上并没有开始斜线式注释.这是一个更简单的解释,说FPC允许斜杠式注释不正确地嵌套.您可以说斜杠样式的注释根本不嵌套,或者嵌套在其他斜杠样式注释中的斜杠样式注释共享一个EOL终止符.
您的作业可能意味着您使用Turbo Pascal样式,其中注释分隔符必须匹配.它绝对不希望你使用Free Pascal风格,因为它会使分配无法完成 - DFA不能接受任意嵌套的结构.