nil or #nil?

Pennell pennell at tiac.net
Mon Sep 21 13:13:01 UTC 1998


Did this ever get resolved?

Michael's original example was simplified from T-Gen's actual usage. A
real-life example is a little more complicated.
----------------------------------------------------------
initialize
 "TokenSpecScanner initialize"
 " <tokenClass> : \<[a-zA-Z_][a-zA-Z_0-9]*\> ;
 <directive>  : \{[a-zA-Z_][a-zA-Z_0-9]*\} ;
 <dchar>  : \\[0-9][0-9][0-9]    ;
 <ochar>  : \\o[0-7][0-7][0-7]   ;
 <hchar>  : \\x[0-9A-F][0-9A-F]   ;
 <eschar>  : \\[!-\~]      ;
 <char>   : [!-\~]       ;
 <comment> : \""(~[\""]|\""\""|[\s\t\r])*\""   {ignoreComment} ;
 <space>  : [\s\t\r]+      {ignoreDelimiter} ;
"

 | table |
 self fsa: #( #( nil nil nil nil nil nil nil nil 2 nil nil nil 2 nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil 2 3 4 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 7 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 10 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 22 3 3 3 nil ) #( nil nil nil nil nil nil nil nil 2 nil nil
nil 2 nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil 2 nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil ) #( nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil ) #( nil nil
nil nil nil nil nil nil 5 nil nil nil 5 nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil 5 5 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
nil ) #( nil nil nil nil nil nil nil nil 5 nil nil nil 5 nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil 5 5 6 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 nil ) #( nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil 5 nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil ) #( nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 nil nil nil nil 8 nil 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 nil nil nil nil nil ) #( nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil 8 8
8 8 8 8 8 8 8 8 nil nil nil nil 9 nil nil 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 nil nil nil nil 8 nil 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 nil nil nil nil nil ) #( nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil ) #( nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil 11
11 11 11 11 11 11 11 11 11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 11
11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
11 11 15 11 11 11 11 11 11 11 11 19 11 11 11 11 11 11 nil ) #( nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil ) #( nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil 13 13 13 13 13 13 13 13 13 13 nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil ) #( nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil 14 14 14 14 14 14 14 14
14 14 nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil ) #( nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil ) #( nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil 16 16 16 16 16 16 16 16 nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil ) #( nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil 17 17 17 17 17 17 17 17
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil ) #( nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil 18 18 18 18 18 18 18 18 nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil ) #( nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil ) #( nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil 20 20 20 20 20 20 20 20
20 20 nil nil nil nil nil nil nil 20 20 20 20 20 20 nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil ) #( nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil 21 21 21 21 21 21 21 21 21 21 nil nil nil nil nil nil nil 21
21 21 21 21 21 nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil ) #( nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil )
( nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23
23 23 23 23 23 23 23 23 23 23 23 nil nil nil nil 23 nil 23 23 23 23 23 23 23
23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 nil nil nil nil
nil ) #( nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil 23 23 23 23 23 23 23 23 23 23
nil nil nil nil nil nil nil 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23
23 23 23 23 23 23 23 23 23 23 nil nil nil nil 23 nil 23 23 23 23 23 23 23 23
23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 nil nil 24 nil nil )
#( nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil nil nil nil nil nil ) ).
 table := #( nil #( #( ) #( #('<space>' #ignoreDelimiter) ) ) #( #( '+' ';'
'*' '~' ')' '(' '[' '|' ':' ']' '?' '-' ) #( #('<char>' nil) ) ) #( #( )
( #('<char>' nil) ) ) nil #( #( ) #( #('<comment>' #ignoreComment) ) )
 #( ) #( #('<char>' nil) ) ) nil #( #( ) #( #('<tokenClass>' nil) ) )
 #( ) #( #('<char>' nil) ) ) #( #( ) #( #('<eschar>' nil) ) ) #( #( )
( #('<eschar>' nil) ) ) nil #( #( ) #( #('<dchar>' nil) ) ) #( #( )
( #('<eschar>' nil) ) ) nil nil #( #( ) #( #('<ochar>' nil) ) ) #( #( )
( #('<eschar>' nil) ) ) nil #( #( ) #( #('<hchar>' nil) ) ) #( #( )
( #('<char>' nil) ) ) nil #( #( ) #( #('<directive>' nil) ) ) ).
 self constructFinalStateTable: table

-------------------------

The options that have been proposed:

>From Pat Caudill:

Well I am looking at an older copy of the document, not the approved one,
but the ANSI standard states "If an identifier appears as an <array
element> and it is one of the reserved identifiers nil, true, false the
value of the coresponding element of the collection is the value of that
identifier." If you want the symbol nil you say
Table _ #( (-1 -1 ) 2 3 #nil).

>From David N. Smith:

For what it's worth, IBM Smalltalk 4.5 does this:

   #( nil #nil true #true false #false self super )

produces:

    #( nil #nil true #true false #false #self #super )

where nil, true, and false are the special objects.

I'd vote for this result, not because IBM Smalltalk does it, but because it
makes sense, is much more often the 'right thing', is in the proposed
standard, and makes Squeak have one less gotcha. It's these little things
that can drive you crazy when switching between systems.

>From Dan Ingalls:

1.  Table _ #( (-1 -1 ) 2 3) copyWith: nil.
....the no-frills approach.

2.  Table _ { {-1. -1}. 2. 3. nil}.
....at least if someone ports it, they'll know it needs to be converted from
Squeak.

3.  Table _ #( (-1 -1 ) 2 3 ##(nil)).
....I'm NOT proposing ## as the operator that means evaluate (a sort of
un-literal mode), but I AM saying that if we must have a way of putting
values in a literal expression, then let us
a)  make it explicit, and
b)  make it general.
[Historical note: ST-76 had just such a construct -- it had a special
character (typed as ctrl-openParen) that looked like '->(' and meant "the
value of this parenthetical expression" in a literal.  Needless to say, that
feature was not felt to carry its weight when the ST-80 standard was
defined]

-----------
The EASY thing to do for porting T-Gen is to use Dan's option 2 with the
Squeak-specific curly-braces.  However, I thought there was an earlier
thread on this subject where at least one Squeak core-team questioned
whether the curly braces would be continued.

I for one would much prefer the ANSI/IBM/et-al approach.  I think David (N.
Smith)'s summary says it all.

-david





More information about the Squeak-dev mailing list