Значение семантической функции insert() в атрибутивной грамматике

#parsing #compiler-construction #grammar #semantics #parse-tree

#синтаксический анализ #компилятор-конструкция #грамматика #семантика #синтаксический анализ-дерево

Вопрос:

В настоящее время я пытаюсь нарисовать поток атрибутов для этой грамматики атрибутов.

 decl → ID decl tail
 decl.t := decl tail.t  
 decl tail.in tab := insert (decl.in tab, ID.n, decl tail.t)  
 decl.out tab := decl tail.out tab  

decl tail → , decl
 decl tail.t := decl.t  
 decl.in tab := decl tail.in tab  
 decl tail.out tab := decl.out tab  

decl tail → : ID ;
 decl tail.t := ID.n  
 decl tail.out tab := decl tail.in tab  
 

Но я не понимаю, что insert (decl.in tab, ID.n, decl tail.t) это значит.
Моим первым предположением было, что это будет что-то похожее на функцию insert() в Python.
Но, насколько я знаю, Python insert() принимает два параметра, но в этой грамматике атрибутов он принимает три параметра decl.in tab, ID.n, decl tail.t , поэтому мое первоначальное предположение здесь явно неверно.
Я новичок в разработке компиляторов, и мне трудно понять значения некоторых семантических функций, которые я никогда раньше не видел. (например ReduceTo() )

Что это insert (decl.in tab, ID.n, decl tail.t) значит?
Есть ли список подобных семантических функций, которые мне нужно знать или запоминать?

Ответ №1:

По предположению, целью является добавление объявленной переменной с указанным типом в таблицу символов («вкладка»).

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

Для грамматик атрибутов нет предопределенных семантических функций, поэтому вам не нужно беспокоиться о запоминании их списка. Конкретные семантические функции, используемые в конкретном приложении грамматики атрибутов, будут определены самим этим приложением.