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

PROLOG是一种特殊的有限状态自动机,prolog,automaton,finite-state-automaton,Prolog,Automaton,Finite State Automaton,我找不到下列问题的答案。自动机接受诸如“A:5739.”或“C::399\4342”之类的字符串,这些字符串提醒我文件系统的路径,但我不确定这一点 问题文本: 考虑以下用Prolog编写的有限状态自动机。 什么似乎能识别? 假设有谓词 alphanumeric/1 当它的参数是字母或数字时,这是真的 自动机: accept([I | Is], S) :- delta(S, I, N), accept(Is, N). accept([], Q) :- final(Q). initial(sta

我找不到下列问题的答案。自动机接受诸如“A:5739.”或“C::399\4342”之类的字符串,这些字符串提醒我文件系统的路径,但我不确定这一点

问题文本:

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

假设有谓词

alphanumeric/1
当它的参数是字母或数字时,这是真的

自动机:

accept([I | Is], S) :- delta(S, I, N), accept(Is, N).
accept([], Q) :- final(Q).

initial(start).
final(type).

delta(start, 'A', dev).
delta(start, 'B', dev).
delta(start, 'C', dev).
...
delta(start, 'Z', dev).
delta(dev, ':', n1).

delta(n1, '\', dev).
delta(n1, L, name) :- alphanumeric(L).
delta(name, L, name) :- alphanumeric(L).
delta(name, '\', name).
delta(name, '.', type).
delta(name, L, type) :- alphanumeric(L).

前两个子句只是NDFA总是如何执行的:每次我们查找列表中的下一个字符,并通过
delta/3
谓词来获得一个新的状态,直到我们到达序列的末尾,之后我们可以验证该状态是否为接受状态

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

程序的其余部分描述了
delta/3
转换。我们可以将其可视化,例如使用GraphViz:

这将生成以下图像:

根据此图,我们可以看到它接受以下语言(正则表达式表示法):

因此,它接受以字符a-Z开头的字符串,后跟冒号(
),后跟零个或多个反斜杠冒号(
:\
),后跟字母数字字符,后跟单词组
[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:.

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

你能自己解决这个问题吗?我知道自动机接受某种常规语言。但问题中似乎缺少的是你方的公平尝试。你试图用什么方法来解决这个问题?你遇到了什么问题?你被困在哪里?目前这个问题看起来像是逐字逐句地抄袭作业。我试图画出自动机,试图写下自动机接受的一些字符串(如A:5739.或C:\:399\4342)。。。我写的例子提醒我文件系统的路径…可能连接到JSON之类的语言?而不是JSON,因为JSON是一种上下文无关的语言,而不是常规语言。你的方向是对的。请回答您的问题并添加您的进程。答案可能是:自动机识别路径,该路径表示文件或目录在具有文件系统树结构的数据存储中的特定位置?
[A-Z]:(\:)*[A-Za-z0-9][A-Za-z0-9\]*[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:.