在工作中,我的任务是推断一些有关动态语言的类型信息。我将语句序列重写为嵌套let表达式,如下所示: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 由于我从一般类型信息开始,并试图推断出更具体的类型,因此自然的选择是精简类型。例如,条件运算符返回其真假分支类型的并集。在简单的情况下,它效果很好。 但是,在尝试推断以下类型时遇到了障碍: function …
假设输入字符串为。然后,如果某个NFA当前处于状态(并且已读取输入的最大字母),则在读取下一个输入符号之前,如果存在以下转换,则NFA会分成两个NFA,一个处于状态,另一个处于。类型。如果存在类型为,其中是NFA的某些状态,那么记住状态另一个NFA 直到读取输入直到字母 ř 瓦特我 ř 小号ř ε →交通小号ř ε →交通小号ε →交通 q 1。。。。ϵ → q k ϵ → r q i r w i r w i r ϵ ,ϵ → a → s ϵ ,ϵ → a → q 1w1w2...wnw1w2...wnw_1w_2...w_nrrrwiwiw_irrrsssr →ϵsr→ϵsr \xrightarrow{\epsilon} sr →ϵs →ϵq1个。。。。→ϵqķ→ϵ[Rr→ϵs→ϵq1....→ϵqk→ϵrr \xrightarrow{\epsilon} s \xrightarrow{\epsilon} q_1....\xrightarrow{\epsilon} …