的语法?-6ren"> 的语法?-我正在编写一个工具来使用 2005 Annex P 中提供的语法解析 Ada 源文件。 通过以下代码,我知道 [“03C0”] 代表“希腊字母 Pi”,但它是一个合法的变量名吗? 01 package-6ren">
gpt4 book ai didi

parsing - ["03C0"] 如何匹配附件 P 中 的语法?

转载 作者:行者123 更新时间:2023-12-01 01:25:34 26 4
gpt4 key购买 nike

我正在编写一个工具来使用 2005 Annex 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

    我根据 做了进一步的调查茴香酮的回答。
  • 如果我在代码中使用 ["03C0"] ,字符集不需要是"UTF-8",这是有道理的。
    编译时,我需要“gnatmake -gnatWb Hello.adb”。
  • 如果我在代码中使用p,必须将字符集改为“UTF-8”,否则GPS将无法识别该字符并提示信息。
    改成UTF-8后,需要使用“gnatmake -gnatW8 Hello.adb”来编译。
  • 我试过 将 ["03C0"] 更改为 ["abcd"] 并再次编译,它会失败,说“标识符中的宽字符无效”。
    我猜:如果 ["03C0"] 仅通过语法解析,["abcd"] 也会通过语法检查。
    因此,从失败结果和消息来看,我可以说,GNAT 以这种方式工作:
    有一个预处理 在将源文件发送到语法解析器之前。
    预处理将评估 unicode 值,检查它是否在有效的宽字符集中。
    如果它在有效的宽字符集内,它将继续发送到语法解析器。否则,失败。
  • 最佳答案

    1:见A.5 The Numerics Package - RM 使用正确的 unicode 字符。您的报价似乎来自 GNAT 包。为此,请参阅 GNAT Users Guide关于如何告诉 GNAT 它应该使用哪种编码。

    2:没有来自 ARM 的规则。这是一个编码问题,由实现(GNAT)完成。 ["03C0"] (使用 -gnatWb,这是默认值)的处理方式类似于 π (使用 -gnatW8)甚至 Pi作为变量名(或在本例中为常量)的有效标识符。

    关于parsing - ["03C0"] 如何匹配附件 P 中 <Ada 引用手册> 的语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7579814/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com