代码生成中字符串模板的静态语法验证与SDL论坛会议对学术研究的影响
字符串模板与上下文无关文法
字符串模板通常包含用于分支、循环和递归的嵌入式控制结构,以及表达式中的嵌入式变量引用。在解释过程中,文本输出通过计算动态表达式并将其字符串表示按顺序插入输出流来确定。控制结构附带的条件也会被计算,并相应地调整控制流。常见的字符串模板引擎有String Template、Xtend中的富字符串和Python的Cheetah等。
静态分析旨在从元模型实例中抽象出来,通过特定定义可以对字符串模板的控制结构进行建模。循环是递归(尾递归)的特殊情况,也可以在该结构中表达。但目前数学结构未涵盖动态表达式,需在明确与上下文无关文法的关系后再进行处理。
STS与CFG的映射
给定描述目标语言的上下文无关文法(CFG) $G = (V, Σ, P, V0)$ 和描述代码生成器的字符串模板系统(STS) $S = (T, Σ, R, T0)$,我们可以探讨 $LS ⊆LG$ 是否成立。
- STS 到 CFG 的映射(STS →CFG) :定义一个函数 $f$,将字符串模板定义的右侧扩展为无替代项的右侧集合,用于生成产生式。
- 形式上,$f : (Σ ∪T ∪P(T))∗→P((Σ ∪T)∗)$ 定义如下:
plaintext f(ω) = ⎧ ⎪ {ε} for ω = ε ⎪ {ω} for ω ∈Σ ∪T ⎪ {S ∈ω} for ω ∈P (T) ⎪ {σb| b ∈f(β)} for ω = σβ, σ ∈Σ ∪T, β ∈(Σ ∪T ∪P(T))+ ⎪ {A