Parsing [KDB+;/Q]:将Q解析树分解为Q表达式(字符串)

Parsing [KDB+;/Q]:将Q解析树分解为Q表达式(字符串),parsing,kdb,q-lang,Parsing,Kdb,Q Lang,让我们将deparse1定义为与q的本机parse相反的操作,因此以下内容适用: q)aStringQExpression~deparse parse aStringQExpression 1b 问题 deparse函数的定义是什么,这样上面的函数就可以工作了 例如,在下面的更新表达式中,我们知道“a*0^b+c-d”表达式对应于(*;`a;(^;0;(+;`b;(-;`c;`d)))解析树: q)-3!parse "update col:a*0^b+c-d from t" "(!;`t;()

让我们将
deparse
1定义为与q的本机
parse
相反的操作,因此以下内容适用:

q)aStringQExpression~deparse parse aStringQExpression
1b
问题

deparse
函数的定义是什么,这样上面的函数就可以工作了

例如,在下面的更新表达式中,我们知道
“a*0^b+c-d”
表达式对应于
(*;`a;(^;0;(+;`b;(-;`c;`d)))
解析树:

q)-3!parse "update col:a*0^b+c-d from t"
"(!;`t;();0b;(,`col)!,(*;`a;(^;0;(+;`b;(-;`c;`d)))))"
因此,设想的
deparse
函数应返回:

q)deparse "(*;`a;(^;0;(+;`b;(-;`c;`d))))"
"a*0^b+c-d"
q)deparse "(!;`t;();0b;(,`col)!,(*;`a;(^;0;(+;`b;(-;`c;`d)))))"
"update col:a*0^b+c-d from t"
动机/背景/用例: 内联表达式可以说比深度嵌套的解析树更快(从左到右)。尽管在后台,我的代码以编程方式编辑解析树,但将生成的解析树转换为内联表达式字符串对于调试或演示非常有用



1此处描述的类似功能:

我认为实现这一点的唯一方法是递归解析列表并构建字符串,例如,对于二元:

q)deparse:{a:-3!'x;a[1],a[0],a[2]}
q)deparse parse "3*3"
"3*3"

因此,您可以计算最后一个x的值,并相应地构建字符串。我认为唯一的方法是递归地解析列表并构建字符串,例如,对于二元:

q)deparse:{a:-3!'x;a[1],a[0],a[2]}
q)deparse parse "3*3"
"3*3"
因此,您可以计算最后一个x的值,得到它的价,并相应地构建字符串

解决了这个问题。惊人的:

q).unparse.unparse parse "update col:a*0^b+c-d from t"
"update col:(a*(0^(b+(c-d)))) from t"

q).unparse.unparse parse "a*0^b+c-d"
"(a*(0^(b+(c-d))))"
解决了这个问题。惊人的:

q).unparse.unparse parse "update col:a*0^b+c-d from t"
"update col:(a*(0^(b+(c-d)))) from t"

q).unparse.unparse parse "a*0^b+c-d"
"(a*(0^(b+(c-d))))"

最终我非常幸运,意外地在Github上找到了完整的解决方案。看到我的答案了,但是非常感谢!最终我非常幸运,意外地在Github上找到了完整的解决方案。看到我的答案了,但是非常感谢!