如何自动括起任意Julia表达式

时间:2017-10-26 01:01:01

标签: parsing syntax julia parentheses

给出一个语法上有效但是随意的Julia表达式,例如

3 - 4 > 1 & 2 + 2 == 4 | 10 - 5 > 2

2 + 9 - 8 * 8 ^ 7 / 2 == 8 + 8 / 1 ^ 2

...是否有一种方便的方式完全括号表达式的方式与Julia的标准解析方式一致?

一种方法还远远不够:

julia> parse("3 - 4 > 1 & 2+2 == 4 | 10 - 5 > 2")
:(3 - 4 > 1 & 2 + 2 == (4 | 10) - 5 > 2)

julia> parse("2 + 9 - 8 * 8 ^ 7 / 2 == 8 + 8 / 1 ^ 2")
:((2 + 9) - (8 * 8^7) / 2 == 8 + 8 / 1^2)

例如,对于最后一种情况,“完全括号”是指:

:(((2 + 9) - ((8 * (8 ^ 7)) / 2)) == (8 + (8 / (1 ^ 2))))

还有其他什么吗?

1 个答案:

答案 0 :(得分:4)

您需要一些代码来递归遍历引用的表达式。

我在这里做了一个适用于+, -之类的中缀操作的示例,如果你使用像f(a)这样的函数调用将会失败

每个表达式都有3个字段headtypargs,但只有headargs有用{{1}大部分时间都是typ。您可以使用

查看此内容
Any
相关问题