Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Работа компилятора: формулировка некоторых понятий

#компиляция #компилятор


У меня не совсем качественная подготовка по английскому языку, да и hashcode.ru не
являет сервисом, который помогает переводить что-то, но меня в первую очередь интересует
грамотная формулировка понятий.
Вот есть абзац:

The lexical parser analyses the source code and breaks it up into lexical tokens,
removing on the way all comments and white-spaces between the tokens. The syntax parser
groups the tokens into syntax constructs, and builds an equivalent    internal    abstract
   syntax    data    structure. The semantic analyser walks through the abstract syntax
and determines whether all semantic rules have been obeyed. The  code  generator, 
based  on the abstract  syntax  once again, produces the final equivalent code.

Я его перевёл вот так:

Лексический парсер анализирует исходный код, разбивает его на так называемые лексические
«токены», удаляет все комментарии и лишние пробелы. Синтаксический парсер группирует
эти полученные «токены» в синтаксические конструкции и создает эквивалентные внутренние
абстрактные синтаксические структуры данных. Семантический анализ снова «проходит»
по абстрактным синтаксическим структурам и проверяет соблюдение всех правил. Генератор
кода, снова основываясь на абстрактных синтаксических структурах, создаёт конечный
эквивалентный код.

У меня вопрос вот: что значит в данном контексте "abstract syntax", это одно и то
же, что и  "an equivalent   internal   abstract   syntax   data   structure", т.е.
это синонимы и что это означает в реальности?    


Ответы

Ответ 1



Я бы сказал, что здесь понятия abstract syntax и abstract syntax data structure коррелируют, однако, обозначают разные вещи. Abstract syntax - некое описание используемого парсером грамматики (которое, как пример, может быть задано в стандартных LL, LR формах, или, например, в форме БНФ). Abstract syntax data structure - структура данных, необходимая для поддержания набора правил грамматики. Примером такой структуры может являться тривиальное дерево разбора, разумеется, что в случае более сложных парсеров, сложность используемых структур возрастает. Если интересно, то могу порекомендовать неплохой референс по теории компиляторов вообще, там можно найти большое количество примеров и более формальные определения соответсвующих понятий.

Комментариев нет:

Отправить комментарий