我无法找到以下问题的答案。自动机接受“A:5739”之类的字符串。或者“C :: 399 \ 4342”“,这些让我想起了文件系统的路径,但我不确定。
问题文字:
考虑以下用Prolog编写的有限状态自动机。 什么似乎能识别?
假设有谓词
ext_table
当参数为字母或数字时为真。
自动机:
alphanumeric/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.]" ];
}
这会产生以下图像:
基于此图,我们看到它接受语言(正则表达式):
[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:.
它只能包含一个点作为最后一个字符。此外,反斜杠不能是最后一个字符。它是一种基本的文件路径语言,虽然有一些重构。