形式语言理论 - 自动机

时间:2010-05-23 17:11:00

标签: language-theory

我想知道正式的语言。我有一种解析器: 它读取类似xml的序列化树结构,并将其转换为多维度数组。

我的观点是所使用的算法与不同类型的自动机(状态机图灵机堆栈......)之间的相似之处。

所以问题是:我在这里隐含使用的自动机是什么,它适合哪些正式语言系列? 什么是递归?

我的意思是“使用隐式”的“自动机”是“这是完成相同工作的最小自动机”。

以下是完整的来源:

$字; //一个XML标记数组'< tag>','< / tag>'和简单的文字内容

$ tree = array(     'type'=> '根',     'sub'=>阵列() );

$ pTree = array(& $ tree);

$ deep = 0;

foreach($ words as $ elem){

if ( preg_match($openTag, $elem) ) { // $elem is an open tag

    $pTree[$deep++]['sub'][] = array( // we add an element to the multidim array
        'type' => 'block',
        'content' => $elem,
        'sub' => array()
    );

    $size = sizeof($pTree[$deep - 1]['sub']);
    $pTree[$deep] = &$pTree[$deep - 1]['sub'][$size - 1]; // down one level in the tree

} elseif ( preg_match($closeTag, $elem) ) { // it is a close tag

    $deep--; // up in the tree 

} else { // simple element

    $pTree[$deep]['sub'][] = array(
        'type' => 'simple',
        'content' => $elem
    );

}

}

1 个答案:

答案 0 :(得分:4)

请再次查看您的问题。您指的是$words变量,该变量不在您的示例中。此外,没有代码,不知道正在做什么,很难回答你。

从变量$deep的名称判断,它可能不是状态。自动机中的状态是特定于自动机的集合的元素; $deep看起来可能包含深度,任何正整数。再说一次,没有代码就很难分辨。

无论如何,如果你没有将你的代码设计为一个自动机的实现,你可能根本不会“隐式使用”任何自动机。

您的简单xml类文件可能被确定性堆栈计算机识别,或者由确定性无上下文语法生成,使其成为Chomsky层次结构中的Type-2。再一次,这只是一个猜测,“类似xml的序列化树结构”对任何形式主义来说都过于模糊。

简而言之,如果您希望使用任何正式理论,请更正式地提出您的问题。


编辑(看到代码后):

你正在建造一棵树。这对于自动机来说是遥不可及的(至少是“标准”的)。有限自动机仅适用于输入和状态,堆栈机器为其添加堆栈,图灵机具有可在两个方向上移动的读写磁带。

自动机的“输出”是简单的“是”(接受)或“否”(不接受,或无限循环)。 (可以定义图灵机以在其磁带上提供更多输出。) 我能回答“哪个是做同样工作的最小自动机”的最好方法是你的语言可以被堆栈机器接受;但它的工作方式会有所不同而且不会给你树木。

但是,您可以查看 grammars - 另一种介绍解析树概念的正式语言构造。 你在这里做的是用自上而下的解析器创建这样一个解析树。

相关问题