在 Erlang 中创建 AST 节点

发布于 2024-09-03 20:54:59 字数 541 浏览 2 评论 0原文

我正在玩 Erlang,我正在尝试编写一个简单的算术解析器。

我想尝试解析以下表达式:

((12+3)-4)

我想将表达式解析为一堆 AST 节点。在解析这个表达式时,我首先会为 (12+3) 表达式创建一个二进制表达式,它在 C# 中看起来像这样:

var binaryStructure = new BinaryStructure();
binaryStructure.Left = IntegerLiteralExpression(12);
binaryStructure.Right = IntegerLiteralExpression(4);
binaryStructure.Operator = binaryExpression.Operator != BinaryOperatorType.Addition;

我对 Erlang 很陌生,我想知道如何创建一个像这样的结构在 Erlang 中,我可以将其放在一个列表中,将其用作表达式堆栈。

谁能建议如何创建这样的树状结构?函数是否合适?

I am playing about with Erlang and I am trying to write a simple arithmetic parser.

I want to try and parse the following expression:

((12+3)-4)

I want to parse the expression into a stack of AST nodes. When parsing this expression, I would first of all create a binary expression for the (12+3) expression which would look something like this in C#:

var binaryStructure = new BinaryStructure();
binaryStructure.Left = IntegerLiteralExpression(12);
binaryStructure.Right = IntegerLiteralExpression(4);
binaryStructure.Operator = binaryExpression.Operator != BinaryOperatorType.Addition;

I am quite new to Erlang and I am wondering how I would go about creating a structure like this in Erlang that I can place on a List that I would use as the stack of expressions.

Can anyone suggest how to create such a tree like structure? Would a function be a good fit?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眼角的笑意。 2024-09-10 20:54:59

在像 Erlang 这样的函数式语言中,它要简单得多。只是

{'+', 12, 3}

以更抽象的方式

A = 12,
B = 3,
OP = '+',
{OP, A, B}.

In functional language like Erlang it is far simpler. Just make it

{'+', 12, 3}

In more abstract way

A = 12,
B = 3,
OP = '+',
{OP, A, B}.
腻橙味 2024-09-10 20:54:59

另外,请查看 stdlib 应用程序中的 erl_parse.erl 模块。

mkop 函数读取:

mkop(L, {Op,Pos}, R) -> {op,Pos,Op,L,R}.                                        

mkop({Op,Pos}, A) -> {op,Pos,Op,A}.

Also, have a look to the erl_parse.erl module in the stdlib application.

Reading from to the mkop function:

mkop(L, {Op,Pos}, R) -> {op,Pos,Op,L,R}.                                        

mkop({Op,Pos}, A) -> {op,Pos,Op,A}.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文