我知道FSA如何接受字符串'nice'(如维基百科页面所示)但FSA接受的语言如何才能成为编程语言?
是这样的吗?让我说我有一个字母A = {1,2,+, - }和语言L = {1 + 1,1 + 2,1-1,1-2}然后我的FSA看起来像这样;
-->[1]--1-->[2]--+-->[3]--1-->[[5]]
| |
- 2-->[[6]]
|
v
[4]--1-->[[7]]
|
2-->[[8]]
当我达到接受状态5,6,7,8时,我知道该值应该是什么,因此我定义了一种编程语言???
如果我将它扩展为嵌套的FSA,那么我可以计算像'1plus2'和'sqrt(9)'这样的字符串。
这种想法是否正确?
答案 0 :(得分:4)
不,那不太对劲。要了解FSA如何与计算相关,您需要采用更一般的计算视图。
一般来说,计算是关于输入和产生输出。现在,让我们关注一种我们可以计算答案的问题:决策问题,输出被限制为“是”或“否”。让我们进一步限制我们所讨论的那些问题的类型,这些问题的输入是字符串(如“nice”)。这些正是FSA可以用来回答的问题(但他们无法回答所有这些问题!)。
因此,FSA可以回答以下形式的(一些)问题:字符串X是否具有属性Y?这样的例子是“字符串是已知的有限字符串集合吗?”,“字符串是奇数的二进制表示吗?”,“字符串是否有'cat'作为子字符串?”。这些都可以由FSA回答。
你的问题 - 比如1 + 1 - 不是决定问题。你可以把它作为一个决策问题,如下:“我的字符串是'x + y = z',其中x,y和z是整数X,Y和Z以及X + Y = Z的十进制表示?”使用FSA无法回答这个问题,很多人都喜欢这个问题。
存在更强大的状态机;他们不是“有限的”。示例包括下推自动机(PDA),线性有界自动机(LBA)和图灵机(TM)。有一些决定问题的形式“字符串X是否具有属性Y?”即使是图灵机,也是最强大的已知类型的自动机,都无法回答。停止问题给出了一个例子:“给定'x(y)',其中x是程序,y是程序的输入,由X表示的程序在传递输入y时停止吗?”。在一般情况下,没有TM - 也就是说,没有算法 - 来回答这个问题。
你能写一个FSA来回答这个问题吗?“我用这种语言将字符串x作为语法上有效的字符串吗?”当然,这取决于您的语言规则。 FSA可以识别“Number + Number + ... + Number”形式的字符串,但FSA无法告诉您总和是多少。但是,您无法为此添加括号,否则FSA不再适用。换句话说,识别字符串和计算结果之间存在差异,而FSA通常被认为是做前者。
请随时提出任何其他问题。如果您对这些问题感兴趣,请访问以下网站并提交对新计算机科学StackExchange的支持: