如何构建投影的解析树?
How to build a parse-tree of projections?
我想以某种方式将解析树保存到文本格式文件中,而不是将其恢复为 q
。
但是分析树可能包含投影,比如 +[;1]2
。我应该如何处理这些文件树并正确 save/load 呢?在以下示例中,我尝试直接使用 ::
时遇到错误:
parse"+[;1]2"
(parse"+[;1]2")[0] / (+; ::; 1)
null(parse"+[;1]2")[0;1] / 0b, something strange
null(::) / 1b
eval((+;::;1);2) / 3
我认为解决这个问题的一种方法是用空字符串替换所有 ::
,然后应用 eval/
(eval/)((+;;1);2) / ok
但也有其他情况需要::
,例如:
m:(1 2;3 4)
parse ".[m;(::;1)]1"
eval ((.;`m;(enlist;::;1));1) / 4
eval ((.;`m;(enlist;;1));1) / error: 'type
那么对于这两种情况,我如何正确地保存(/加载)文本格式的解析树?
我想要一些奇怪的东西吗? q
是否有可能得到一对一的抽象语法树程序表示?
您无意中发现了 Andrey Kozyrev 所说的“神奇价值”,请参阅此处:https://github.com/quintanar401/DCoQ
但是,是的,您要实现的目标很奇怪,而且肯定不常见。您希望从中得到什么?
我想以某种方式将解析树保存到文本格式文件中,而不是将其恢复为 q
。
但是分析树可能包含投影,比如 +[;1]2
。我应该如何处理这些文件树并正确 save/load 呢?在以下示例中,我尝试直接使用 ::
时遇到错误:
parse"+[;1]2"
(parse"+[;1]2")[0] / (+; ::; 1)
null(parse"+[;1]2")[0;1] / 0b, something strange
null(::) / 1b
eval((+;::;1);2) / 3
我认为解决这个问题的一种方法是用空字符串替换所有 ::
,然后应用 eval/
(eval/)((+;;1);2) / ok
但也有其他情况需要::
,例如:
m:(1 2;3 4)
parse ".[m;(::;1)]1"
eval ((.;`m;(enlist;::;1));1) / 4
eval ((.;`m;(enlist;;1));1) / error: 'type
那么对于这两种情况,我如何正确地保存(/加载)文本格式的解析树?
我想要一些奇怪的东西吗? q
是否有可能得到一对一的抽象语法树程序表示?
您无意中发现了 Andrey Kozyrev 所说的“神奇价值”,请参阅此处:https://github.com/quintanar401/DCoQ
但是,是的,您要实现的目标很奇怪,而且肯定不常见。您希望从中得到什么?