если заявление выдает ply py - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу внедрить, если еще условия в моем языке. В настоящее время у меня есть

def p_if_statement(p):
     '''if_statement : IF LPAREN condition RPAREN LCURLY statements RCURLY
                 | IF LPAREN condition RPAREN LCURLY statements RCURLY ELSE LCURLY statements RCURLY'''
    print(p[0:10])

Я знаю, что он незакончен, но у меня проблемы с просмотром, что делать, если условие if ложно. Пример:

if(False){ 
    a = 5;
    print(a);
}

Этот код напечатает 5, а затем напечатает p [0:10]. Кажется, что операторы оцениваются до условного. Любая помощь будет принята с благодарностью

1 Ответ

1 голос
/ 28 апреля 2020

Это верно. Когда выполняется функция действия уменьшения слоя, все ее компоненты уже выполнены. Если бы это было не так, аргумент p не смог бы содержать значения semanti c компонентов.

Поэтому, если вы хотите включить циклы и условные выражения в язык, который вы анализируете, вы Придется отказаться от идеи прямой оценки при разборе. Вместо этого для разбора необходимо создать описание проанализированного текста, которое впоследствии может быть оценено (или скомпилировано для последующей оценки).

Распространенной формой описания проанализированного текста является Абстрактное синтаксическое дерево (AST), хотя существует много других опций (и нет точного AST, поэтому у вас также есть большая гибкость).

...