当我尝试进行查找以获取存储在(常见模式)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)
你有调试这个的想法吗?