Programming languages 作为(编程)语言接受者的有限状态自动机

Programming languages 作为(编程)语言接受者的有限状态自动机,programming-languages,finite-automata,state-machine,Programming Languages,Finite Automata,State Machine,我知道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

我知道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)”这样的字符串


这个想法正确吗?

不,不完全正确。要理解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)和图灵机(TMs)。有一些决策问题的形式是“字符串X是否具有属性Y?”这甚至连已知最强大的自动机图灵机都无法回答。停止问题给出了一个例子:“给定‘x(y)’,其中x是程序,y是程序的输入,当传递输入y时,由x表示的程序是否停止?”。在一般情况下,没有TM——也就是说,没有算法——来回答这个问题

你能写一个FSA来回答这个问题吗“字符串x在我定义的语言中是语法上有效的字符串吗?”当然,这取决于你的语言规则。FSA可以识别形式为“数字+数字+…+数字”的字符串,但FSA不能告诉您总和是多少。但是,您不能在此添加括号,否则FSA将不再足够。换句话说,识别字符串和计算结果之间存在差异,FSA通常被认为是在做前者

请随时提出任何其他问题。如果您对此类问题感兴趣,请访问以下网站并提交以下内容,以表示对新的计算机科学StackExchange的支持:


不,那不太对。要理解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)和图灵机(TMs)。有一些决策问题的形式是“字符串X是否具有属性Y?”这甚至连已知最强大的自动机图灵机都无法回答。停止问题给出了一个例子:“给定‘x(y)’,其中x是程序,y是程序的输入,当传递输入y时,由x表示的程序是否停止?”。在一般情况下,没有TM——也就是说,没有算法——来回答这个问题

你能写一个FSA来回答这个问题吗“字符串x在我定义的语言中是语法上有效的字符串吗?”当然,这取决于你的语言规则。FSA可以识别形式为“数字+数字+…+数字”的字符串,但FSA不能告诉您总和是多少。但是,您不能在此添加括号,否则FSA将不再足够。换句话说,识别字符串和计算结果之间存在差异,FSA通常被认为是在做前者

请随时提出任何其他问题。如果您对此类问题感兴趣,请访问以下网站并提交以下内容,以表示对新的计算机科学StackExchange的支持:


有“嵌套FSA”这样的东西吗?我的印象是(无界)嵌套导致无限状态。我的知识在这方面是缺乏的,嵌套FSA实际上可能是