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

В момента се опитвам да начертая потока на атрибутите за тази граматика на атрибута.

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.
Но доколкото знам, insert() на Python приема два параметъра, но в тази граматика на атрибута отнема три параметъра decl.in tab, ID.n, decl tail.t, така че първоначалното ми предположение е очевидно погрешно тук.
Аз съм съвсем нов в дизайна на компилатора и ми е трудно да разбера значенията на някои семантични функции, които никога не съм виждал преди. (напр. ReduceTo())

Какво означава това insert (decl.in tab, ID.n, decl tail.t)?
Има ли списък със семантични функции като тази, които трябва да знам или запомня?


person Community    schedule 22.11.2020    source източник


Отговори (1)


Предполага се, че намерението е да се добави декларираната променлива с посочения тип в символна таблица (таб).

За целите на анализа на потока на атрибутите обаче не е необходимо да знаете какво прави insert. Трябва само да знаете, че той изисква определени стойности (неговите аргументи), така че тези атрибути трябва да са налични, за да се изчисли атрибутът, присвоен от върнатата стойност на функцията.

Няма предварително дефинирани семантични функции за граматиките на атрибутите, така че не е нужно да се притеснявате да запомните списък с тях. Конкретните семантични функции, използвани в определено приложение за граматика на атрибути, ще бъдат посочени от самото това приложение.

person rici    schedule 22.11.2020