>>> "David PONCE" <David.Ponce@...> seems to think that:
>Hi Eric,
>
>> I have an impending upgrade for `semantic-lex'.
>>
>> Many analyzers update the lexer local variable `end-point', and a
>> couple others during operation. This throws warnings during the byte
>> compile stage for languages using this technique. In addition, these
>> variables are not documented too well.
>>
>> I've put in new variables such as `semantic-lex-end-point', documented
>> it, improved the doc strings for related functions, and used that
>> during lexical analysis. Some point soon I'll check in the change for
>> a couple of these variables, in addition to updating all languages in
>> the `bovine' directory. Some other languages may cease working after
>> this and need updating.
>>
>> I hope I can finish this soon.
>>
>> Additional thoughts?
>
>All that looks good! Thanks Eric.
>
>As you are working on semantic-lex, I think it would be better to
>rename `semantic-lex-token' to `semantic-lex-push-token' as that
>function actually push a new token in the lexical stream. And to
>create a true `semantic-lex-token' to create new lexical tokens.
>Something like that:
[ ... ]
>
>Thus we will have a true abstraction layer for lexical tokens, like
>we have one for semantic tokens.
That seems like a good idea. Is there a push-token for semantic as
well? I am unaware of one. It would be nice to have consistency.
>P.S.: I checked the fixes in for semantic-el.el and semanticdb-el.el.
>Is there any reason for semantic-el.el to be in the bovine
>sub-directory? Elisp parser is not the "bovinator", isn't it?
The elisp parser is also a bovine parser, but without a .bnf file.
The language was hand coded in table format. Instead of recursing
into lists once found, it uses the Emacs Lisp reader instead, so it
is a bit of a hybrid.
Here is it's table:
(defvar semantic-toplevel-elisp-bovine-table
`((bovine-toplevel
(semantic-list
,(lambda (vals start end)
(append (semantic-elisp-use-read (car vals))
(list start end)))))
)
"Top level bovination table for elisp.")
so it is still using the lexer to skip comments, and the bovinator to
find unmatched (non-list) syntax. While it is certainly legal to say
1
in a lisp file, it isn't so useful. ;)
Perhaps it would be faster to remove the bovinator step, and just use
`read' on the whole file, and loop over it. Then again, the
bovinator has built in protection against unterminated lists. What a
dilemma, eh?
Eric
--
Eric Ludlam: zappo@..., eric@...
Home: http://www.ludlam.net Siege: http://www.siege-engine.com
Emacs: http://cedet.sourceforge.net GNU: http://www.gnu.org
|