1

我有一个关于如何访问 ada 中另一个文件的字段的问题。

我有这种类型:

type Token_Type is (INT_LIT_TOK, IDENT_TOK, ASSIGN_OP_TOK, ADD_OP_TOK,
                   SUB_OP_TOK, MULT_OP_TOK, DIV_OP_TOK, LE_TOK, LT_TOK,
                   GE_TOK, EQ_TOK, NE_TOK, GT_TOK, EOS_TOK, IF_TOK,
                   PRINT_TOK, DO_TOK, WHILE_TOK, THEN_TOK, ELSE_TOK,
                   LOOP_TOK, LEFT_PAREN_TOK, RIGHT_PAREN_TOK, MAIN_TOK,
                   SUB_TOK, END_TOK);

现在我有另一个文件,我想在其中进行比较,看看我所拥有的是否属于这些类型之一,所以我做了

tok = Token_Type.INT_LIT;

但它似乎不喜欢这条线的第二部分。我是否错过了有关如何从不同文件访问字段的内容?

4

2 回答 2

2

如果您的类型声明是Token_Type在 中声明的Some_Package,并且给定它tok是类型的Some_Package.Token_Type,您应该键入

tok = Some_Package.INT_LIT
于 2013-07-21T13:31:05.477 回答
0

一些额外的评论:如果有一个 USE 子句提到将适用于您的语句的包,则不需要使用包名称:

procedure Something is 
    use Some_Package;
begin
    if tok = INT_LIT then ...
end Something;

或者,在 Ada 2012 中:

procedure Something is 
    use all type Some_Package.Token_Type;
begin
    if tok = INT_LIT then ...
end Something;

如果你真的想包含类型名称,让读者清楚你在做什么,你也可以说

if tok = Some_Package.Token_Type'(Some_Package.INT_LIT) then ...

Some_Package.并且您可以根据所应用的 USE 子句消除前缀。有时您可能不得不以这种方式编写代码,如果名称 INT_LIT 不明确并且编译器没有足够的上下文来确定 INT_LIT 的一个或另一个含义是不可能的。

于 2013-07-22T17:35:29.303 回答