我试图定义一种编程语言的通用操作:如何使用类或区域设置?
type_synonym vname = "string"
type_synonym 'a env = "vname ⇒ 'a option"
locale language =
fixes big_step :: "'exp × 'val env ⇒ 'val ⇒ bool" (infix "⇒" 55)
fixes typing :: "'type env ⇒ 'exp ⇒ 'type ⇒ bool" ("(1_/ ⊢/ (_ :/ _))" [50,0,50] 50)
例如,这是一个特殊的语言:
datatype foo_exp =
FooBConst bool |
FooLet vname foo_exp foo_exp |
FooVar vname |
FooAnd foo_exp foo_exp
datatype foo_val = FooBValue bool | FooIValue int
type_synonym foo_env = "foo_val env"
datatype foo_type = FooBType | FooIType
type_synonym foo_tenv = "foo_type env"
inductive foo_big_step :: "foo_exp × foo_env ⇒ foo_val ⇒ bool"
inductive foo_typing :: "foo_tenv ⇒ foo_exp ⇒ foo_type ⇒ bool"
如何使它language
语言环境的实例?
在一个理论中是否可以对不同的语言使用相同的符号(⇒
和_ ⊢ _ : _
)?这种表示法可能是多态的吗?
感谢您的回答!有用。但是我得到以下警告:“模糊输入⌂产生3个分析树:... Language.big_step ... Language.language.foo_big_step ... Language.language.bar_big_step ...”如果我删除了'foo_big_step'的符号和“bar_big_step”,然后我得到以下错误:“无法解析adhoc常量重载 big_step ::”foo.foo_exp×(char list⇒foo.foo_val选项)⇒foo.foo_val⇒bool“ 在术语”(foo.FooAnd (foo.FooBConst True)(foo.FooBConst False),e)⇒foo。FooBValue False“ no instances” – Denis
@Denis:我误解了'interpre''不会重复'adhoc_overlaoding'声明。我相应地编辑了我的帖子。解释之后,您必须重新发布专门用于“foo”实例的'adhoc_overlaoding'命令。然后,你不再需要'foo_big_step'上的语法注释,语法也不再含糊不清了。 –