You're almost there Raul, and I think you are much fresher on fsms than I am.
The flaw is only that an empty word should be emitted only when multiple consecutive delimiters (2+ whitespace in your example) are encountered. The behaviour at start and end is correct. On Sunday, November 15, 2020, 08:44:43 a.m. EST, Raul Miller <[email protected]> wrote: Ah, I see the difficulty: there's no character after that final space to be used to backtrack from, to emit the empty token at the end of a string like ' this is a test '. So the machine sets up to emit an empty token, then runs out of text and instead emits a whitespace token. Or... this backtrack mechanism is flawed for the purpose of emitting empty tokens, in some cases. Thanks, -- Raul On Sun, Nov 15, 2020 at 8:32 AM Raul Miller <[email protected]> wrote: > > Oops, no, it works. I was just testing on an older version of J. > > Though the actual implementation of splitword2 is flawed, since it > doesn't support the idea of strings which don't begin or end with > whitespace. > > Here's an implementation with almost the behavior I think you specified: > > splitword3=: 0;(states'');a.e.' ',CRLF,TAB > 4.1 1 NB. 0. start here. > 2.1 1 NB. 1. skip starting whitespace > 3.7 3.7 NB. 2. starting whitespace had ended, backtrack > 4.2 4.2 NB. 3. empty on starting whitespace > 4 5.2 NB. 4. other > 6.7 6.7 NB. 5. new whitespace, backtrack > 7.3 7.3 NB. 6. empty on new whitespace > 4.1 7 NB. 7. skip new whitespace > ) > > That said, I'm not sure if this is a temporary thing or if it should > be left in place. > > Also, J crashed while I was debugging this (I'm getting a non-empty > whitespace at the end of the string, and I do not understand why). > And, your next email in this thread came in, so I should probably stop > here, for now. > > Thanks, > > > -- > Raul > > On Sun, Nov 15, 2020 at 7:44 AM Raul Miller <[email protected]> wrote: > > > > Hmm... > > > > The basic purpose of the new backtrack mechanism is to allow token > > formation rules to depend on characters which have not yet been > > encountered but which will be encountered soon. It also introduces > > some new risks, as a consequence -- the possibility of infinite loops > > and the possibility of emitting tokens containing characters which > > have been emitted in previous tokens. The possibility of emitting an > > empty token lies right on the boundary of that second risk area. > > > > Testing, I get an index error when I try to emit an empty token. > > > > states=: 3 :0 > > 0 10 #: <. 10 * > -.&a: <@".;._2] 0 :0 > > ) > > > > splitword=: 0;(states'');a.e.' ',CRLF,TAB > > 1.1 0 NB. 0 whitespace > > 1 0.3 NB. 1 other > > ) > > > > splitword2=: 0;(states'');a.e.' ',CRLF,TAB > > 1.1 0 NB. 0 whitespace > > 2.7 2.7 NB. 1 whitespace had ended, backtrack > > 3.2 3.2 NB. 2 empty on whitespace end > > 3 0.3 NB. 3 other > > ) > > > > splitword ;: 'this is a test' NB. this works > > splitword2 ;: 'this is a test' NB. index error > > > > So either my test is flawed, or the implementation gives an index > > error for backtracking past the start of a token. > > > > Thanks, > > > > > > -- > > Raul > > > > On Sat, Nov 14, 2020 at 7:57 PM 'Pascal Jasmin' via Programming > > <[email protected]> wrote: > > > > > > Can this be used to emit empty words? What are some imagined uses of > > > this code? > > > > > > > > > http://www.jsoftware.com/pipermail/programming/2017-March/046910.html > > > > > > suggested ew when j=_1 should emit empty box/word instead of crashing, > > > seemed simple enough, but I don't understand this addition yet. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Saturday, November 14, 2020, 05:08:33 p.m. EST, Henry Rich > > > <[email protected]> wrote: > > > > > > > > > > > > > > > > > > I have been rewriting interfaces to make the JE reentrant. This beta > > > has changes in I/O to the front end, which has more ramifications than I > > > can test for. I am hoping the beta users will cover the combinations & > > > report anything that looks unusual. > > > > > > This beta has the new backtrack function for (x ;: y). > > > > > > Henry Rich > > > > > > On 11/14/2020 5:05 PM, Eric Iverson wrote: > > > > J902-beta-m available for windows/macos/linux. > > > > > > > > If you already run 902-beta, then upgrade is easy: > > > > load'pacman' > > > > 'upgrade'jpkg'jengine' > > > > ---------------------------------------------------------------------- > > > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > > > > > > -- > > > This email has been checked for viruses by AVG. > > > https://www.avg.com > > > > > > > > > ---------------------------------------------------------------------- > > > For information about J forums see http://www.jsoftware.com/forums.htm > > > ---------------------------------------------------------------------- > > > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
