📜  TOC中的假设(语言规则性)和算法(从L-图到NFA)

📅  最后修改于: 2021-04-26 05:41:26             🧑  作者: Mango

先决条件–有限自动机,L-图及其表示
L-graph可以生成上下文相关的语言,但是与编程常规的语言相比,编程上下文相关的语言要困难得多。这就是为什么我提出了关于哪种L-图可以生成常规语言的假设的原因。但是首先,我需要向您介绍所谓的迭代嵌套。

您可能还记得巢是一条中立的道路T_1T_2T_3 , 在哪里T_1T_3是周期和T_2路径是中性的。我们会打电话给T_1T_2T_3一个迭代的巢,如果T_1T_2T_3路径多次打印相同的符号字符串T_1印刷\alpha^kT_2印刷\alpha^lT_3印刷\alpha^mk, \: l, \: m \geqslant 0\alpha是字符串输入符号(更好的是,如果至少有一个k, \: l\: and\: m\: is \geqslant 1 )。
从这个定义中得出下一个假设。

假设–如果在无上下文的L-图G中所有嵌套都在迭代,则此L-图G定义的语言L(G)是规则的。
如果这一假设在不久的将来得到证实,它将在编程中发生很大的变化,这将使创建新的简单编程语言比现在容易得多。上面的假设导致了下一个算法,该算法将带有迭代嵌套的上下文无关L-图转换为NFA。

算法–将具有迭代补码的上下文无关L图转换为相应的NFA
输入–上下文无关的L-图G=(\Sigma, V, P, \lambda, P_0, F)带有迭代补码
输出 – G'=(\Sigma', V', \lambda', P'_0, F')\\*

  • 步骤1: L图和NFA的语言必须相同,因此,我们不需要新的字母\Rightarrow \Sigma'' = \Sigma, \: P'' = P 。 (评论:我们建立了上下文无关的L-图G”,它等于起始图G’,没有相互冲突的嵌套)
  • 步骤2:为图形G构建Core(1,1)。
    V”:= {(v, \varepsilon )| v \in的V \forall佳能\in核心(1,1),v \notin k}
    \lambda'' := {弧o \in \lambda |开始和最终状态o', o'' \in V”}

    对于所有k \in核心(1,1):
    步骤1’。 v:=教规k的第一状态。 \eta := \varepsilon
    V” \cup= (v, \eta)
    第2步’。 \lambda'' \cup=来自国家的弧(v, \eta)遵循此弧线进入由以下规则定义的新状态:
    \eta := \eta ,如果输入支架在此弧上= \varepsilon ; \eta'the\: input\: bracket' ,如果输入括号是开括号; \eta 'without\: the\: last\: bracket' ,如果输入括号是右括号
    v:=规范k的第二状态
    V” \cup= (v, \eta)
    步骤3’。重复步骤2’,同时教规中仍存在弧形。

  • 步骤3:构建Core(1、2)。
    如果佳能连续有2个相等的弧线,则开始状态和最终状态匹配;否则,返回0。我们使用该弧将给定状态的弧添加到自身中\lambda''
    将其余的添加到\lambda弧v – u (\alpha)\lambda''以…的形式(v, \varepsilon) - (u, \varepsilon) (\alpha)
  • 第四步: P''_0 = (P_0, \varepsilon).\: F'' = \{(f, \varepsilon) | f \in F\}
    (评论:以下是将上下文无关的L-graph G”转换为NFA G’的算法)
  • 步骤5:对每个迭代补码执行以下操作T = T_1T_2T_3在G中”:
    添加新状态v。创建以state开头的路径beg(T_3) , 等于T_3 。从v到T_3创建路径,等于T_1 。删除周期T_1T_3
  • 步骤6: G’= G”,其中弧未加载括号。

为了使上面的每一步都很清楚,我将向您展示下一个示例。
\textbf{Example:}\\ \textbf{Input:}具有迭代补码的无上下文L图
G = ( \{a, b, c\}, \\*\{1, 2, 3\} \\*\{( (, ) ), ( [, ] )\}, \\*\\*\{ (: \{ 1 - a - 1 \}, \\*): \{ 2 - a - 2 \}, \\*\big[: \{ 1 - b - 2 \}, \\*\big]: \{ 2 - c - 3 \}, \\*\varepsilon: \{ 1 - a - 2 \} \}, \\*\\*1, \\*\{2, 3\} \}
决定了language = \{a^(^2^n^+^1^) | n \geqslant 0\} \cup \{bc\}
起始图G
\Sigma'' = \{a, b, c\}\\ V'' = \varnothing\\ \lambda'' = \varnothing
核心(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) \cup {1 – a,(1 – 1 – a,(1 – 1 – a – 2 – a,)1 – 2 – a,)1 – 2}
步骤2:步骤1′-步骤3′
\Rightarrow\\ V'' = \{(1, \varepsilon), (2, (_2), (3, \varepsilon), (1, (_1), (2, )_1), (2, \varepsilon)\}\\* \lambda'' = \{ \\*(: \{ (1, \varepsilon) - a - (1, (); (1, () - a - (1, () \}, \\*): \{ (2, )) - a - (2, )); (2, )) - a - (2, \varepsilon) \}, \\*\big[: \{ (1, \varepsilon) - b - (2, [) \}, \\*\big]: \{ (2, [) - c - (3, \varepsilon) \}, \\*\varepsilon: \{ (1, \varepsilon) - a - (2, \varepsilon); (1, () - a - (2, )) \} \}\\ P''_0 = (1, \varepsilon)\\ F'' = \{(2, \varepsilon), (3, \varepsilon)\}\\ G'' = (\Sigma'', V'', P'', \lambda'', P''_0, F'')
中间图G”
\Sigma' = \{a, b, c\}\\ V' = V'' \cup \{4\}\\ P'_0 = P''_0\\ F' = F''\\ \lambda' = \{ \\*(1, \varepsilon) - a - (1, (); \\*(2, )) - a - 4; \\*4 - a - (2, )); \\*(2, )) - a - (2, \varepsilon); \\*(1, \varepsilon) - b - (2, [); \\*(2, [) - c - (3, \varepsilon); \\*(1, \varepsilon) - a - (2, \varepsilon); \\*(1, () - a - (2, )) \}\\  G' = (\Sigma', V', \lambda', P'_0, F')
NFA G’