有限状态机构造函数 - 球拍语言

时间:2015-03-11 17:53:15

标签: racket fsm dfa state-machine nfa

我需要构建一个有限的机器构造函数,它接受给定机器语言的所有前缀。让我们说机器M1的语言L(M1)=" abba"那么构造函数应该生成一个新机器M2,使得L(M2)= {empty,a,ab,abb,abba}

现在有一个名为fsm的库中的构造函数,它的原型是这样的:

    (make-fsa list-of-states alphabet starting-state list-of-final-states list-of-rules)
;List-of-rules is the list of transitions such as (q0 a q1)
;the function returns a finite state machine

我试图让每个州都成为最终状态。但它有效吗?

以下代码是我目前所做的:

#lang racket
(require fsm) ;provides the constructor and getters

(define M1
  (make-dfa ;constructor, provided by the fsm library
  '(q0 q1 q2) ;states
  '(a b) ;alphabet
  'q0 ; starting state
  '(q2) ;list of final states
  '((q0 a q1) ;list of rules
    (q0 b q0)
    (q1 a q0)
    (q1 b q2)
    (q2 a q2)
    (q2 b q2))))

; new constructor
(define M2 
  (make-dfa
  (sm-getstates M1) ;sm-getstates is a getter that gets a certain machine's states
  (sm-getalphabet M1) ;sm-getalphabet is a getter that gets a certain machine's alphabet
  (sm-getstart M1) ;sm-getstart is a getter that gets a certain machine's starting state
  (sm-getstates M1) ; TURNING EVERY STATE IN M1 A FINAL STATE, BUT DOES IT WORK?
  (sm-getrules M1))) ;sm-getrules is a getter that gets a certain machine's list of rules

1 个答案:

答案 0 :(得分:0)

您的计划不起作用。考虑一下这台机器:

国家:S,L,F 字母:a,b 开始状态:S 最终状态S

S-a-> L(箭头从S到L给出a) S-B->˚F L-A-→1

本机接受的字符串:{b}

如果你制造一台L是最终状态的新机器, 那么{empty,a,aa,aaa,...}将被接受,但它们不是前缀 在原来的机器上。

在构建M2时,只有具有最终状态路径的M1状态才能成为M2中的最终状态。