【发布时间】:2014-07-10 19:42:37
【问题描述】:
我正在尝试编写类似 Forth 的语言。二级声明效果很好,但我很难使用它。 虽然在“官方”的 Forth 中,二级是原语地址列表,但在我的方法中,二级是一堆调用,而不仅仅是地址。例如内存中声明的 MYFUNCTION 如下所示:
MYFUNCTION:
call primitive_foo;
call primitive_bar;
....
call primitive_foobar;
return ;
语句声明如下:
stmt:
VARIABLE '=' expr { $$ = opr('=', 2, $3, id($1)); }
| PORT '=' expr { $$ = opr('=', 2, $3, id($1)); }
...
...
| SECONDARY { $$ = opr(SECONDARY, 1, ??? ); }
SECONDARY 语句的虚拟歧义由我的词法解析器解决。运算符代码按 SECONDARY 顺序传递,因为解析器将 MYFUCTION 识别为“动态”声明的符号表中的辅助代码并提供它的正确地址。
但是如何将此参数传递给 stmt 声明中使用的 opr() 函数?
也许我应该修改我的 nodeType,但我会避免它。 是否有任何解决方法的想法如何传递该地址?
【问题讨论】:
标签: bison