语言理论抽象细化:上下文无关语言交集检查的方法与实践
1. 引言
在多线程程序的安全性验证中,判断两个上下文无关语言(CFL)的交集是否为空是一个关键问题。本文将介绍一种抽象细化算法,用于解决这一问题,并详细阐述其核心组件和实验结果。
2. 问题背景
在多线程程序中,若两个线程执行完毕且变量值为 (x = y = 1),可能会违反断言。例如,在语法 (G_{T1}) 和 (G_{T2}) 中,执行读取操作 ((r, x, 1)) 和 ((r, y, 1)) 时就可能出现这种情况。而程序的安全性可通过 (L(G_{T1}) \cap L(G_{T2}) \cap L(G_{X}) \cap L(G_{Y}) = \varnothing) 来确认。以 (L(G_{T1}) = {L(A_{X})^n.L(A_{X})^n.(r, x, 1) | n \in \mathbb{N}}) 为例,第一次赋值会将变量的取值从 (x = y = 0) 改变为 (x = 1, y = 0) 或 (x = 0, y = 1),且在后续执行中该取值不会改变。
3. 抽象细化算法
3.1 算法概述
为了检查两个 CFL (L_1) 和 (L_2) 的交集是否为空,我们提出了以下算法:
Algorithm 2. LCegar: test emptiness of context free language intersection
Input: Context-free languages L1 and L2
Output: “empty” or
超级会员免费看
订阅专栏 解锁全文
1206

被折叠的 条评论
为什么被折叠?



