On Thursday, February 14, 2002, at 08:12 PM, Michael Fowler wrote:
> On Thu, Feb 14, 2002 at 04:14:39PM -0500, Ian P. Thomas wrote: >> >> # The array, unchecked_dfa_states, is going to be an array of arrays >> ( 2-D ). >> # dfa_state_creation is a subroutine that returns an array, and takes >> an array >> # or single number, and a scalar, as parameters. > >> push @unchecked_dfa_states, [ dfa_state_creation( $nfa_start_state, >> $epsilon ) ]; >> # I want it to loop until this array is empty. >> while ( $#unchecked_dfa_states > 0 ) > > The typical idiom is: > > while (@unchecked_dfa_states) > >> { >> # I remove the first array and add it to another 2-D array. Syntax >> may be wrong. >> @checked_dfa_state = shift( [ $unchecked_dfa_state[ 0 ] ); > > shift expects an array, not an array reference. This won't even parse > correctly, for that reason and because you have an unmatched bracket. > Did > you copy and paste your code, or type it in? > > What I believe you want is: > > @checked_dfa_states = @{ shift(@unchecked_dfa_states) }; > > That pulls off the first element of @unchecked_dfa_states and > dereferences > it. > > >> # alphabet is an array of symbols( letters or numbers ) >> foreach $symbol ( @alphabet ) >> { >> # I'm having trouble here passing the array, as a whole, to the >> subroutine. I don't # think that I'm getting the syntax right. >> The subroutine will eventually return an array that will be >> # pushed on to the 2-D array unchecked_dfa_states. >> push(@unchecked_dfa_states, dfa_state_creation( >> [ unchecked_dfa_states[ 0 ] ], $symbol ) ); >> } # End foreach. > > I believe you want: > > push( > @unchecked_dfa_states, > dfa_state_creation($unchecked_dfa_states[0], > $symbol) > ); > > It's very hard to determine what it is you're trying to accomplish from > your > code and description. I'm not sure what's a typo and what's > misunderstanding. If the above doesn't help you should send another > message > to the list describing more of what you want to happen, with at least > parseable code. > > > Michael > -- > Administrator www.shoebox.net > Programmer, System Administrator www.gallanttech.com > -- > I typed some of it in so there may have been some typos. What I believe you want is: @checked_dfa_states = @{ shift(@unchecked_dfa_states) }; If I read this correctly, I takes the first array from unchecked_dfa_states and passes it out, but not before dereferencing it. I needed something that could take the first array as a whole object and pass it to checked_dfa_states, another array of arrays. After pouring through my Perl books, I think what I needed to do was to give each stored array in unchecked_dfa_states a scalar reference. This way I could pass the reference to the whole array. Does that sound right? The alternative that I used was keeping two arrays. One just held information about the size of the arrays in unchecked_dfa_states. I called it unchecked_dfa_states_sizes. I did a for loop using a value from the unchecked_dfa_states_sizes array as the ceiling to put each element into a temporary array. I then pushed this temporary array onto checked_dfa_states. The reason I was able to do this is because I kept the two arrays, unchecked_dfa_states unchecked_dfa_states_sizes in sync. That meant that every subscript for unchecked_dfa_states_sizes matched a corresponding subscript for an array in unchecked_dfa_states. A reference to an array, and a separate reference to its size. The other part... I believe you want: push( @unchecked_dfa_states, dfa_state_creation($unchecked_dfa_states[0], $symbol) ); I can't remember exactly, but I believe when I tried to do it this way, it passed an actual numeric value, the memory address to the array referenced by $unchecked_dfa_states[0]. As above, I stored the array referenced by $unchecked_dfa_states[0] into a temporary array and passed that in like this dfa_state_creation( @temp, $symbol) This worked. Thanks for the help. I think I need to spend some more time with the animal books and reading this list. I ended up having some problems using global variables later in the program. Next time I'll cut and paste the code. :) Ian P. Thomas Of course it runs NetBSD www.netbsd.org