M: tagged-epsilon nfa-node
clone [ modify-epsilon ] change-tag add-simple-entry ;
-M: concatenation nfa-node ( node -- start end )
+M: concatenation nfa-node
[ first>> ] [ second>> ] bi
reversed-regexp option? [ swap ] when
[ nfa-node ] bi@
s3 s5 epsilon-transition
s4 s5 ;
-M: alternation nfa-node ( node -- start end )
+M: alternation nfa-node
[ first>> ] [ second>> ] bi
[ nfa-node ] bi@
alternate-nodes ;
] when
] when ;
-M: integer nfa-node ( node -- start end )
+M: integer nfa-node
modify-class add-simple-entry ;
M: primitive-class modify-class
M: object nfa-node
modify-class add-simple-entry ;
-M: with-options nfa-node ( node -- start end )
+M: with-options nfa-node
dup options>> [ tree>> nfa-node ] using-options ;
: construct-nfa ( ast -- nfa-table )