создание AST из грамматики - PullRequest
0 голосов
/ 04 марта 2019

У меня есть проект, который пишет, состоит в том, чтобы написать синтаксический анализатор, который анализирует TS-SQL (временной ряд SQL) и создает абстрактное синтаксическое дерево.Это должно быть реализовано в C ++ с использованием библиотеки Boost Spirit: мне нужно иметь возможность проанализировать все примеры: SELECT Открытие из запасов

Мне нужно написать генератор, который получает AST (созданный для заданногоTS-SQL запрос) в качестве входных данных и генерирует соответствующий план TS-PDL.Этот генератор кода должен будет создать действительные планы выполнения запроса, которые будут давать правильный ответ на данный запрос.Это будет проверено с использованием набора примеров запросов, разработанных в части 1 и переведенных вручную в части 2. Перевод должен соответствовать ожидаемому плану запросов.Следующим шагом после разбора является преобразование AST в дерево запросов.Это будет сделано путем написания пользовательского кода, который будет реализовывать логику нашего языка запросов.(После этого шага дерево запросов может быть преобразовано в план PDL.) Тем не менее, дерево запросов состоит из дерева операторов PDL.Каждый оператор PDL возвращает объекты типа results_t.

<select_stmt> ::= "SELECT" 
<project_list> 
"FROM" <from_stmt> | 
"SELECT" <project_list> 
"WHEN" <when_stmt> 
"FROM" <from_stmt> | 
"SELECT" <project_list> 
"FROM" <from_stmt> 
"FOR SERIES WHERE" <where_stmt> | 
"SELECT" <project_list> 
"WHEN" <when_stmt> 
"FROM" <from_stmt> 
"FOR SERIES WHERE" <where_stmt>
<project_list> ::= 
<col_projection> "," 
<col_projection>| 
<col_projection> 
<col_projection> ::= 
<col_reference> | 
<col_predicate>
...