[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