Рекурсивный поиск и расширение переменных в Pegjs

Ищете решение с использованием чего-то вроде PegJS (открыто для других предложений) для рекурсивного поиска и расширения переменных.

Программа может устанавливать переменные в другие переменные или числа

учитывая такую ​​структуру:
{$a: '1', $b: '$a + 2', $c: '$b + 10'}

$a 
// looks up $a, expands to 1
$b 
// looks up $b, finds $a + 2, looks up $a and expands to 1 + 2
$c 
// looks up $c, finds $b + 10, looks up $b and finds $a + 2, looks up $a and expands to 1 + 2

Каков наилучший способ (инструмент или иным образом) для этого?


person GN.    schedule 05.03.2018    source источник


Ответы (1)


Вот простое решение, которое может помочь вам начать. Определите obj = {} в инициализаторе, потому что вы хотите, чтобы объект был доступен во время синтаксического анализа для кэширования ключей по мере их нахождения.

{
    var obj = {};
}

obj =
    "{" _* keyPair* "}"
    {
        return obj;
    }

keyPair =
    key:key ":" _* val:singleQuoted _*
    {
        obj[key] = val;
    }

key =
    $("$" word)

expression =
    key:key _* "+" _* num:num
    {
        return obj[key] + num;
    }

singleQuoted =
    "'" exp:(expression / num) "'" ","?
    {
        return exp;
    }

num =
    num:$([0-9]+)
    {
        return parseInt(num);
    }

word =
    $([A-Za-z]+)

_ =
    " "
person Josh Voigts    schedule 08.03.2018