我一直致力于使用BNFC实现逻辑编程语言。我遇到的问题与键入规则有关。在A.Ranta的"Implementing Programming Languages“一书中,类型包含在LBNF语法中,如下所示
Tbool. Type ::= "bool" ;
Tdouble. Type ::= "double" ;
Tstring. Type ::= "string";我知道对于像C这样的语法来说,添加类型是很重要的,因为它们在声明中是完整的,因此需要由前端进行解析。在这本书中,类型检查器是用Haskell或Java编写的。然而,在逻辑PL中,类型并不是那么明确,它们是单独声明的,类型的示例语法编码为:
tid: name_type
ty: type
varTy: tid -> ty
arrTy: ty x ty -> ty所以问题是类型的语法在代码中的位置呢?每当我尝试在BNFC中添加类型时,它就没有多大意义,并且测试的输入不能正确解析。这本书有一个很好的C语法示例,但没有提供BNFC创建的前端和类型检查器是如何连接的,信息是如何从一个传递到另一个的,等等。
发布于 2020-08-13 13:45:20
我不熟悉BNFC,但从我看来,它只是一种编译器规范。
所以问题是,类型的语法在代码中的位置是什么?
?
经典的方法不是在语法级别处理类型检查,而是在语义级别处理类型检查。或者,如果您的语言是解释型语言,则在运行时,在解释期间。
https://stackoverflow.com/questions/63388752
复制相似问题