先决条件–有限自动机,L-图及其表示
L-graph可以生成上下文相关的语言,但是与编程常规的语言相比,编程上下文相关的语言要困难得多。这就是为什么我提出了关于哪种L-图可以生成常规语言的假设的原因。但是首先,我需要向您介绍所谓的迭代嵌套。
您可能还记得巢是一条中立的道路 , 在哪里和是周期和路径是中性的。我们会打电话给一个迭代的巢,如果 , 和路径多次打印相同的符号字符串印刷 , 印刷 , 印刷 , 和是字符串输入符号(更好的是,如果至少有一个 )。
从这个定义中得出下一个假设。
假设–如果在无上下文的L-图G中所有嵌套都在迭代,则此L-图G定义的语言L(G)是规则的。
如果这一假设在不久的将来得到证实,它将在编程中发生很大的变化,这将使创建新的简单编程语言比现在容易得多。上面的假设导致了下一个算法,该算法将带有迭代嵌套的上下文无关L-图转换为NFA。
算法–将具有迭代补码的上下文无关L图转换为相应的NFA
输入–上下文无关的L-图带有迭代补码
输出 –
- 步骤1: L图和NFA的语言必须相同,因此,我们不需要新的字母 。 (评论:我们建立了上下文无关的L-图G”,它等于起始图G’,没有相互冲突的嵌套)
- 步骤2:为图形G构建Core(1,1)。
V”:= {(v, )| v 的V 佳能核心(1,1),v k}
:= {弧 |开始和最终状态 V”}对于所有k 核心(1,1):
步骤1’。 v:=教规k的第一状态。 。
V”
第2步’。 来自国家的弧遵循此弧线进入由以下规则定义的新状态:
,如果输入支架在此弧上 ; ,如果输入括号是开括号; ,如果输入括号是右括号
v:=规范k的第二状态
V”
步骤3’。重复步骤2’,同时教规中仍存在弧形。 - 步骤3:构建Core(1、2)。
如果佳能连续有2个相等的弧线,则开始状态和最终状态匹配;否则,返回0。我们使用该弧将给定状态的弧添加到自身中 。
将其余的添加到弧v – u 至以…的形式 - 第四步:
(评论:以下是将上下文无关的L-graph G”转换为NFA G’的算法) - 步骤5:对每个迭代补码执行以下操作在G中”:
添加新状态v。创建以state开头的路径 , 等于 。从v到创建路径,等于 。删除周期和 。 - 步骤6: G’= G”,其中弧未加载括号。
为了使上面的每一步都很清楚,我将向您展示下一个示例。
具有迭代补码的无上下文L图
,
决定了
起始图G
核心(1,1)= {1 – a – 2; 1 – a,(1 – 1 – a – 2 – a,)1 – 2; 1 – b,(2 – 2 – c,)2 – 3}
核心(1,2)=核心(1,1) {1 – a,(1 – 1 – a,(1 – 1 – a – 2 – a,)1 – 2 – a,)1 – 2}
步骤2:步骤1′-步骤3′
中间图G”
NFA G’