Создание узла AST в Erlang - PullRequest
       155

Создание узла AST в Erlang

2 голосов
/ 04 июня 2010

Я играю с Эрлангом и пытаюсь написать простой арифметический парсер.

Я хочу попробовать разобрать следующее выражение:

((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, которую я могу поместить в список, который я буду использовать в качестве стека выражений.

Кто-нибудь может подсказать, как создать такую ​​древовидную структуру? Подойдет ли функция?

Ответы [ 2 ]

6 голосов
/ 04 июня 2010

На функциональном языке, таком как Erlang, это намного проще. Просто сделай это

{'+', 12, 3}

более абстрактно

A = 12,
B = 3,
OP = '+',
{OP, A, B}.
2 голосов
/ 05 июня 2010

Также обратите внимание на модуль erl_parse.erl в приложении stdlib.

Чтение из функции mkop:

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

mkop({Op,Pos}, A) -> {op,Pos,Op,A}.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...