Доброго времени суток
Я пишу учебный проект по СПО, суть которого сводится к разработке транслятора входного языка в выходной (грубо говоря, программа на С++
должна быть переведена на язык Python).
Я испытываю затык на создании синтаксического анализатора, к сожалению не могу понять, как создать нужную структуру, к примеру, для конструкций вида:
Итоговое дерево для объявленной переменной var_a, судя по всему, должно быть таким:
Скриншот дерева
Мой код пока оставляет желать лучшего, я сделал такую реализацию
class Node {
constructor (value, left = null, right = null){
this.value = value;
this.left = left;
this.right = right;
}
}
class NodeTree {
constructor () {
this.root = null;
this.children = [];
}
}
let tree = new NodeTree();
tree.children.push(
new Node(
'L_EQUAL',
new Node (
'L_DECLARE',
'int',
'var_a'
),
new Node (
'L_UNAR',
'+',
'1'
)
)
);
console.log(tree);
Вопрос в реализации: как вообще обходить таблицу с токенами и создать абстрактное синтаксическое дерево?
Таблицу с токенами я получаю в таком виде.
var lexer_res = [
{'id': 0, 'tokenType': "L_TYPE", 'tokenValue': "int"},
{'id': 1, 'tokenType': "L_VAR", 'tokenValue': "var_a"}
];
Посоветуйте, пожалуйста, как реализовать этот алгоритм.