我正在尝试为一种语言创建一个词法分析器和解析器,当涉及到一些更“健壮”的抽象语法树定义时,我很难理解确切的语法。
有问题的问题是:
fun_declaration : FUN ID param_list ':' type '{' fun_block '}'
{ M_fun ($2, [$3], $5, $7) }
fun_block : declarations fun_body { [$1] [$2] }
M_fun的定义如下:
M_fun (String,[(String,Int,M_type)],M_type,[M_decl],[M_stmt])
如您所见,$2 与字符串有关,$3 将返回 [(String,Int,M_Type)],$5 将返回 M_Type,但 $7 是问题所在。它返回一个 [M_decl], [M_stmt]。上面的语法正确吗?快乐的文件编译时没有任何抱怨,但是当我编译 .hs 文件后,它会出现大约 2000 行错误,我认为是这样的原因。