[fucc-devel] Unkown terminal error when using intern
Ivan Boldyrev
lispnik at gmail.com
Thu Jun 5 06:40:40 UTC 2008
On 10225 day of my life highfly joe wrote:
> So is there any way to use string to symbol function in lexer?
Do you mean "in parser"?
Parser have to know all terminals and non-terminals in compile time (to
build internal tables). Arguments of defparser are not evaluated for
this reason (To avoid confusion, warning should be signaled if
you pass a non-atom in terminal list; I will improve it in future
version).
You may use read-time evaluation intoduced by #. read macro:
(fucc:defparser *test*
s ; Initial
;; List of terminals:
(term1 term2 #.(intern "{")))
;; List of rules:
(s -> term2 term1
-> #.(intern "{"))))
Or even
(fucc:defparser *test*
s ; Initial
;; List of terminals:
(term1 term2 #1= #.(intern "{")))
;; List of rules:
(s -> term2 term1
-> #1#))
But isn't simple { better?
I also prefer using keywords for terminals: :{ works fine even if
looks somewhats dreary, but it is compensated by :} terminal.
--
Ivan Boldyrev
XML -- new language of ML family.
More information about the Fucc-devel
mailing list