PROLOG是一种特殊的有限状态自动机

时间:2017-11-08 15:38:38

标签: prolog automaton finite-state-automaton

我无法找到以下问题的答案。自动机接受“A:5739”之类的字符串。或者“C :: 399 \ 4342”“,这些让我想起了文件系统的路径,但我不确定。

问题文字:

  

考虑以下用Prolog编写的有限状态自动机。   什么似乎能识别?

     

假设有谓词

ext_table
     

当参数为字母或数字时为真。

     

自动机:

alphanumeric/1

1 个答案:

答案 0 :(得分:3)

前两个条款只是NDFA总是如何执行:每次我们查找列表中的下一个字符,并通过delta/3谓词传递它以获得新状态,直到我们到达结束时顺序,之后我们可以验证状态是否是接受状态。

接下来我们看到start是初始状态,而type是唯一接受状态。

程序的其余部分描述了delta/3转换。我们可以对此进行虚拟化,例如使用 GraphViz

digraph finite_state_machine {
    rankdir=LR;
    size="8,5"
    node [shape = doublecircle]; type;
    node [shape = circle] start, dev, n1;
    node [shape = circle, label="name"] nam;

    start -> dev [ label = "[A-Z]" ];
    dev -> n1 [ label = ":" ];
    n1 -> dev [ label = "\\" ];
    n1 -> nam [ label = "[A-Za-z0-9]" ];
    nam -> nam [ label = "[A-Za-z0-9\\]" ];
    nam -> type [ label = "[A-Za-z0-9.]" ];
}

这会产生以下图像:

enter image description here

基于此图,我们看到它接受语言(正则表达式):

[A-Z]:(\:)*[A-Za-z0-9][A-Za-z0-9\]*[A-Za-z0-9.]

因此它接受以字符AZ开头的字符串,后跟冒号(:),后跟零或多个反斜杠冒号(:\),后跟一个字母数字字符,后跟零或更多单词组[A-Za-z0-9\.]中的字符后跟至少一个字母数字字符。

例如:

X:\:0Azz0qdqd012QcCQCA
D:\:QA
B:\:\:QT
C:QWR.
C:\:a\q\b\QWR.
C:tempdir\bla\qux.
C:tempdir\bla\.
C:.

它只能包含一个点作为最后一个字符。此外,反斜杠不能是最后一个字符。它是一种基本的文件路径语言,虽然有一些重构。