Ada 2012 RM-注释和字符串文字

Ada 2012 RM-注释和字符串文字,ada,reference-manual,Ada,Reference Manual,我正在浏览Ada 2012 RM,想看看我的理解是否有漏洞,RM是否有漏洞。假设 put_line ("-- this is a not a comment"); 是法律代码,我如何从RM推断其合法性,因为第2.7节规定注释以两个相邻的连字符开头,并延伸到行的末尾,而第2.6节规定字符串文字由两个字符之间可能没有封闭的图形字符序列构成 用作字符串括号的引号。这两个部分之间似乎存在紧张关系,2.7将获胜,但情况显然并非如此。要更清楚地了解这一点,您需要查看RM中的第2.2节 2.2.1,

我正在浏览Ada 2012 RM,想看看我的理解是否有漏洞,RM是否有漏洞。假设

    put_line ("-- this is a not a comment");
是法律代码,我如何从RM推断其合法性,因为第2.7节规定注释以两个相邻的连字符开头,并延伸到行的末尾,而第2.6节规定字符串文字由两个字符之间可能没有封闭的图形字符序列构成
用作字符串括号的引号。这两个部分之间似乎存在紧张关系,2.7将获胜,但情况显然并非如此。

要更清楚地了解这一点,您需要查看RM中的第2.2节

2.2.1,其中说明:

每个汇编的文本都是一系列独立的词汇元素。每个词汇元素由一系列字符组成,可以是分隔符、标识符、保留字、数字文字、字符文字、字符串文字或注释。程序的意义仅取决于构成其编译的词汇元素的特定序列,不包括注释

和2.2 3/2,其中规定:

[在某些情况下,需要显式分隔符来分隔相邻的词汇元素。]分隔符是分隔符\空格字符、格式\效应器格式效应器或行尾中的任意一个,如下所示:

分隔符\空格字符是除注释、字符串\文字或字符\文字外的分隔符

代码点位置为1609字符制表字符制表HT的字符是分隔符,注释中除外

行尾始终是分隔符

在每次编译的第一次之前或最后一次之后,允许在任何两个相邻的词汇元素之间使用一个或多个分隔符

分隔符是以下特殊字符之一:

给出了不同于的结果

X := A --1
       + B;

破折号之间的空格分隔符使第一个减号的词法元素与-1不同,因此在第一种情况下-1是一个数字文字,而-1是一个注释。

为了更清楚地理解这里,您需要查看RM中的第2.2节

2.2.1,其中说明:

每个汇编的文本都是一系列独立的词汇元素。每个词汇元素由一系列字符组成,可以是分隔符、标识符、保留字、数字文字、字符文字、字符串文字或注释。程序的意义仅取决于构成其编译的词汇元素的特定序列,不包括注释

和2.2 3/2,其中规定:

[在某些情况下,需要显式分隔符来分隔相邻的词汇元素。]分隔符是分隔符\空格字符、格式\效应器格式效应器或行尾中的任意一个,如下所示:

分隔符\空格字符是除注释、字符串\文字或字符\文字外的分隔符

代码点位置为1609字符制表字符制表HT的字符是分隔符,注释中除外

行尾始终是分隔符

在每次编译的第一次之前或最后一次之后,允许在任何两个相邻的词汇元素之间使用一个或多个分隔符

分隔符是以下特殊字符之一:

给出了不同于的结果

X := A --1
       + B;

破折号之间的空格分隔符使第一个减号的词法元素与-1不同,因此在第一种情况下-1是一个数字文字,而-1是一个注释。

一切都很好,注释以-,而字符串以一切都很好开始,注释以-开头,而字符串以-开头,因此第2.3节到第2.7节假设文本已经被解析为其词汇元素。因此,第2.3节到第2.7节假设文本已经被解析为词汇元素。那就更有意义了。
X := A - -1
      + B;
X := A --1
       + B;