[racket] parser tools - defining tokens
Hi all,
I am playing with the parser tools in Racket. I would like to be
able pass a separately defined list of symbols to define-empty-tokens
(which is a syntax macro defined in
parser-tools/private-lex/token.rkt). Unfortunately passing a list to
define-empty-tokens doesn't work because the macro is expecting to
find the token symbols coded in-line.
My lexer uses a hash table to distinguish the reserved words in my
language from other identifiers. The object is to initialize the
parser and the hash table from the same list of symbols ... I don't
want to have to maintain 2 identical lists.
Currently I'm doing the following:
=============================================
(define *reserved-words* '(word1 word2 ...))
(define *reserved-word-hash*
(for/hash ((sym *reserved-words*))
(values (string-downcase (symbol->string sym)) sym)
))
(eval `(define-empty-tokens RESERVED ,*reserved-words*))
=============================================
This works, but using eval seems like a hack and the code fails
syntax checking in DrRacket (the parser generator code complains that
the RESERVED token group is undefined).
I probably could modify the macro to return the symbols passed into
it (I'm sure I don't know how to make it accept a separate
list). But I'm not sure it is a good idea to mess with the macro
anyway ... there is enough black magic in the yacc/lex implementation already.
Any thoughts?
George
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20111004/9c874770/attachment.html>