2008-08-26 21:24:14 -04:00
|
|
|
! Copyright (C) 2008 Doug Coleman.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
|
|
USING: accessors arrays assocs fry hashtables kernel sequences
|
2009-02-18 13:27:07 -05:00
|
|
|
vectors ;
|
2008-09-18 15:42:16 -04:00
|
|
|
IN: regexp.transition-tables
|
2008-08-26 21:24:14 -04:00
|
|
|
|
2008-08-28 14:45:04 -04:00
|
|
|
TUPLE: transition from to obj ;
|
2008-08-26 21:24:14 -04:00
|
|
|
TUPLE: literal-transition < transition ;
|
|
|
|
TUPLE: class-transition < transition ;
|
|
|
|
TUPLE: default-transition < transition ;
|
|
|
|
|
|
|
|
TUPLE: literal obj ;
|
|
|
|
TUPLE: class obj ;
|
|
|
|
TUPLE: default ;
|
2008-08-27 17:22:34 -04:00
|
|
|
: make-transition ( from to obj class -- obj )
|
|
|
|
new
|
|
|
|
swap >>obj
|
|
|
|
swap >>to
|
2008-08-28 14:45:04 -04:00
|
|
|
swap >>from ;
|
|
|
|
|
2008-08-27 16:09:49 -04:00
|
|
|
: <literal-transition> ( from to obj -- transition )
|
2008-08-27 17:22:34 -04:00
|
|
|
literal-transition make-transition ;
|
2008-11-24 23:16:29 -05:00
|
|
|
|
2008-08-27 16:09:49 -04:00
|
|
|
: <class-transition> ( from to obj -- transition )
|
2008-08-27 17:22:34 -04:00
|
|
|
class-transition make-transition ;
|
2008-11-24 23:16:29 -05:00
|
|
|
|
2008-08-27 16:09:49 -04:00
|
|
|
: <default-transition> ( from to -- transition )
|
2008-08-27 17:22:34 -04:00
|
|
|
t default-transition make-transition ;
|
2008-08-26 21:24:14 -04:00
|
|
|
|
2008-11-24 23:16:29 -05:00
|
|
|
TUPLE: transition-table transitions start-state final-states ;
|
2008-08-26 21:24:14 -04:00
|
|
|
|
|
|
|
: <transition-table> ( -- transition-table )
|
|
|
|
transition-table new
|
|
|
|
H{ } clone >>transitions
|
2008-11-24 23:16:29 -05:00
|
|
|
H{ } clone >>final-states ;
|
2008-08-26 21:24:14 -04:00
|
|
|
|
2008-09-19 18:54:34 -04:00
|
|
|
: maybe-initialize-key ( key hashtable -- )
|
2009-01-23 19:20:47 -05:00
|
|
|
2dup key? [ 2drop ] [ [ H{ } clone ] 2dip set-at ] if ;
|
2008-09-19 18:54:34 -04:00
|
|
|
|
2008-08-26 21:24:14 -04:00
|
|
|
: set-transition ( transition hash -- )
|
2008-09-19 18:54:34 -04:00
|
|
|
#! set the state as a key
|
|
|
|
2dup [ to>> ] dip maybe-initialize-key
|
2008-08-28 14:45:04 -04:00
|
|
|
[ [ to>> ] [ obj>> ] [ from>> ] tri ] dip
|
2009-02-15 15:28:22 -05:00
|
|
|
2dup at* [ 2nip push-at ]
|
|
|
|
[ drop [ H{ } clone [ push-at ] keep ] 2dip set-at ] if ;
|
2008-08-26 21:24:14 -04:00
|
|
|
|
|
|
|
: add-transition ( transition transition-table -- )
|
|
|
|
transitions>> set-transition ;
|