Parsing 属性语法中insert()语义函数的意义

Parsing 属性语法中insert()语义函数的意义,parsing,compiler-construction,grammar,semantics,parse-tree,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

我目前正在尝试绘制此属性语法的属性流

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选项卡,ID.n,decl tail.t)
是什么意思。
我的第一个假设是它类似于Python中的insert()函数。
但据我所知,Python的
insert()
需要两个参数,但在这个属性语法中,它需要三个参数
decl.in tab,ID.n,decl tail.t
,所以我最初的假设显然是错误的。
我对编译器设计很陌生,我很难弄清楚一些我以前从未见过的语义函数的含义。(例如
ReduceTo()

这个
插入(decl.in选项卡,ID.n,decl tail.t)
是什么意思?

有这样的语义函数列表我需要知道或记住吗?

猜测一下,目的是将声明的具有指定类型的变量添加到符号表(“tab”)中

但是,为了分析属性流,您实际上不需要知道
insert
的作用。您只需要知道它需要某些值(其参数),因此这些属性必须可用,以便计算从函数返回值分配的属性

属性语法没有预定义的语义函数,因此您不必担心记忆它们的列表。特定属性语法应用程序中使用的特定语义函数将由该应用程序本身指定