Python—生成一个函数来检查给定的查询字符串是否被给定的FSM接受

Python—生成一个函数来检查给定的查询字符串是否被给定的FSM接受,python,fsm,Python,Fsm,我必须实现一个函数来检查下面的FSM(有限状态自动机)是否接受查询字符串 我已经做了一个小的设计,基本上检索了所有需要处理的数据。我仍然需要实现代码,检查查询字符串中的每个字符是否在特定箭头(转换)中可用 例如,我们有查询字符串“aab”。代码必须运行的方式是,它检查查询中的第一个字符是否在从q0到q1的转换中可用。在本例中,这是真的,因此代码需要检查从q1到q2的转换中是否存在查询中的第二个字符。这也是事实。但是没有剩余的转换,因此查询中的第三个字符在任何转换中都不存在,它需要返回false

我必须实现一个函数来检查下面的FSM(有限状态自动机)是否接受查询字符串

我已经做了一个小的设计,基本上检索了所有需要处理的数据。我仍然需要实现代码,检查查询字符串中的每个字符是否在特定箭头(转换)中可用

例如,我们有查询字符串“aab”。代码必须运行的方式是,它检查查询中的第一个字符是否在从q0到q1的转换中可用。在本例中,这是真的,因此代码需要检查从q1到q2的转换中是否存在查询中的第二个字符。这也是事实。但是没有剩余的转换,因此查询中的第三个字符在任何转换中都不存在,它需要返回false。如果接受查询字符串,则代码必须返回True 我是个新手,所以我希望你能理解下面的代码

代码:

这是输出:

This is the first query_string
['b']
First entries for Q0 : 
('a', 'Q1')
('b', 'Q1')
First entries for Q1 : 
('a', 'Q2')
('', 'Q2')
('b', 'Q2')
False


This is the second query_string
['a', 'a', 'b']
First entries for Q0 : 
('a', 'Q1')
('b', 'Q1')
First entries for Q1 : 
('a', 'Q2')
('', 'Q2')
('b', 'Q2')
False

编写有限状态机非常简单:

它由三部分组成

  • 一组状态(整数列表)
  • 一组最终状态(整数列表)
  • 转换矩阵(布尔值的3d数组
    (state\u old,state\u new,char)
    )。(ε边仅表示所有转换都有效)
  • 然后创建一个递归调用自身的函数。此函数接受字符串作为输入、当前状态以及两组状态和转换表。如果字符串为空,则如果state是final state,则返回true;如果state不是final,则返回false。如果字符串不是空的,它会检查转换表中的条目是否有已传递的状态和
    string[0]
    ,并使用
    string[1://code>和新状态调用自己

    差不多就是这样。我并没有故意在这里放任何代码,因为这是一个很好的练习,可以自己完成

    This is the first query_string
    ['b']
    First entries for Q0 : 
    ('a', 'Q1')
    ('b', 'Q1')
    First entries for Q1 : 
    ('a', 'Q2')
    ('', 'Q2')
    ('b', 'Q2')
    False
    
    
    This is the second query_string
    ['a', 'a', 'b']
    First entries for Q0 : 
    ('a', 'Q1')
    ('b', 'Q1')
    First entries for Q1 : 
    ('a', 'Q2')
    ('', 'Q2')
    ('b', 'Q2')
    False