0

当我尝试进行查找以获取存储在(常见模式)env配置中的变量的值时,我遇到了一个问题。Map以下是导致问题的语法和重写规则的提取代码:

syntax Exp
       ::= Id
     | Value
     | "read" "(" Exp ")"

syntax Value
       ::= ...
         | #loc(Int)

rule <k> read ( X:Id ) => read ( #loc( L )  ) ... </k>
     <env> ... X |-> L ... </env>

当我运行一个小程序时,它卡在了这个配置中:

 <k>
    read ( x ) ~> #freezer_;_OSL-SYNTAX_Stmt_Exp0_ ( ) ~> .Stmts ~> .
 </k>
 <env>
    x |-> 0
    y |-> 2
 </env>

我希望这read(x)将在 中重写read(#loc(0)),但不应用该规则。如果我在规则中注释env配置要求并用 L常量替换0,则可以应用该规则:

rule <k> read ( X:Id ) => read ( #loc( 0 )  ) ... </k>
//     <env> ... X |-> L ... </env>

我得到了终止.(因为其他规则将处理这个read(#loc(0))之后)

<k>
     .
</k>
<env>
     x |-> 0
     y |-> 2
</env>

我还尝试在此处使用此文档中的此语法

rule <k> read ( X:Id ) => read ( #loc( Env[X] )  ) ... </k>
     <env> Env:Map </env>

但我得到一个解析错误

[Error] Inner Parser: Parse error: unexpected token '['.
    Source(/home/alessio/Project/osl/model/./osl.k)
    Location(156,43,156,44)

你有调试这个的想法吗?

4

0 回答 0