【问题标题】:List of Child Elements of a Element in ASIS(Ada Semantics interface Specification)ASIS中元素的子元素列表(Ada语义接口规范)
【发布时间】:2018-06-11 06:04:03
【问题描述】:

我正在使用 ASIS(Ada Semantics interface Specifications)实现一个简单的工具。 我在给定 Elements 中列出子元素时遇到问题。例如,我的赋值语句为 C := A + B; 我可以从上面的赋值语句中得到代表“A + B”的元素(表达式),但需要从上面的表达式中分别提取 A、B 元素。 ASIS 中的查询是什么。我已经尝试过“Traverse_element”但无法成功。

【问题讨论】:

    标签: abstract-syntax-tree ada semantics gnat asis


    【解决方案1】:

    A + B是一个函数调用,所以你必须提取函数调用的实际参数:

    declare
       use ASIS.Expressions;
    begin
       for Parameter_Association of Function_Call_Parameters (Expression => Element,
                                                              Normalized => True) loop
         declare
            Formal : constant Asis.Element := Formal_Parameter (Parameter_Association);
            Actual : constant Asis.Element := Actual_Parameter (Parameter_Association);
         begin
            ...
         end;
       end loop;
    end;
    

    【讨论】:

    • 如果表达式包含更多函数(例如:A + B*C),该方法是否有效?
    • 是的,但是其中一个实际值将是函数调用。
    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 2016-03-19
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多