首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逻辑编程语言中的类型是如何使用BNFC实现的?

逻辑编程语言中的类型是如何使用BNFC实现的?
EN

Stack Overflow用户
提问于 2020-08-13 13:38:43
回答 1查看 20关注 0票数 0

我一直致力于使用BNFC实现逻辑编程语言。我遇到的问题与键入规则有关。在A.Ranta的"Implementing Programming Languages“一书中,类型包含在LBNF语法中,如下所示

代码语言:javascript
复制
Tbool. Type ::= "bool" ;
Tdouble. Type ::= "double" ;
Tstring. Type ::= "string";

我知道对于像C这样的语法来说,添加类型是很重要的,因为它们在声明中是完整的,因此需要由前端进行解析。在这本书中,类型检查器是用Haskell或Java编写的。然而,在逻辑PL中,类型并不是那么明确,它们是单独声明的,类型的示例语法编码为:

代码语言:javascript
复制
tid: name_type
ty: type
varTy: tid -> ty
arrTy: ty x ty -> ty

所以问题是类型的语法在代码中的位置呢?每当我尝试在BNFC中添加类型时,它就没有多大意义,并且测试的输入不能正确解析。这本书有一个很好的C语法示例,但没有提供BNFC创建的前端和类型检查器是如何连接的,信息是如何从一个传递到另一个的,等等。

EN

回答 1

Stack Overflow用户

发布于 2020-08-13 13:45:20

我不熟悉BNFC,但从我看来,它只是一种编译器规范。

所以问题是,类型的语法在代码中的位置是什么?

经典的方法不是在语法级别处理类型检查,而是在语义级别处理类型检查。或者,如果您的语言是解释型语言,则在运行时,在解释期间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63388752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档