我正在编写一个工具,用2005附件P中提供的语法解析Ada源文件。
下面的代码,我知道 [“03C0”] 代表“希腊字母Pi”,但它是一个合法的变量名吗?
01 package Ada.Numerics is
02 Pi : constant := 3.14159_26535_89793_23846_26433_83279_50288_41971_69399_37511;
03 ["03C0"] : constant := Pi;
04 e : constant := 2.71828_18284_59045_23536_02874_71352_66249_77572_47093_69996;
05 end Ada.Numerics;
当使用语法解析第03行时,我目前来到“basic_declaration”。下一个规则是什么?下一个规则呢?接下来的下一个规则?直到[“03C0”]可以成功解析。最终,问题应该是:解析哪个规则[“03C0”]?
Ada参考手册位于: http://www.adaic.org/resources/add_content/standards/05rm/RM-Final.pdf
页面右下角的Ada参考手册第702页(PDF格式),页面676。 附件P / 3.1
3.1
basic_declaration ::=
type_declaration | subtype_declaration
| object_declaration | number_declaration
| subprogram_declaration | abstract_subprogram_declaration
| null_procedure_declaration | package_declaration
| renaming_declaration | exception_declaration
| generic_declaration | generic_instantiation
我根据 oenone 的回答做了进一步的调查。
答案 0 :(得分:4)
1:见A.5 The Numerics Package - RM使用正确的unicode字符。您的引用似乎来自GNAT包。为此,请参阅GNAT Users Guide,了解如何告诉GNAT应该使用哪种编码。
2:没有来自ARM的规则。这是一个编码问题,由实现(GNAT)完成。 ["03C0"]
(使用-gnatWb,这是默认值)的处理方式与π
(带-gnatW8)或甚至Pi
一样,作为变量名称的有效标识符(或者在这种情况下为常量)。 / p>