[net.lang.prolog] A coding trick for grammar rules.

O'KeefeHPS@sri-unix.UUCP (04/04/84)

From:  O'Keefe HPS (on ERCC DEC-10)

Someone here today wanted to write a grammar rule which
could detect the end of a word.  It isn't always possible
to check the next character, becuase the word might be
at the end of the string.  What was needed was something
like

end_of_word --> ( end_of_string | [C], {not_in_word(C)} ).

It finally dawned on me that I could write

        end_of_string(X, X).

This dodge may be useful to other hackers.  REAL hackers
will doubtless prefer to write

end_of_word --> ( = | [C], {not_in_word(C)} ).

If one prefers not to eat the character following the word,
one can write

end_of_word --> = .     % space needed for tokeniser!
end_of_word, [C] --> [C], {not_in_word(C)}.

Of course the clean way would have been to match the longest
possible string of letters, digits, and underscores, but we
were after a quick patch.
I'm not at all sure that I care for any of this...

Possibly we could start a Prolog Joke Book ?