On 2013-10-25 10:53, Sven Barth wrote:
Am 25.10.2013 01:06, schrieb ListMember:
One of my aims (one which we discussed here a few years ago) is to
rip the parser and lexer from the compiler. I want to have a token
tree (including directives) from the mouth of the horse (so to speak).
That will be quite complicated, because the scanner will not output
the directives it parsed (e.g. if you do a "consume(_SEMICOLON)" to
parse a ";" any directive between your current position and the next
";" will be handled and the parser will not be notified of any changes
(as a result of these directives there might be changes in settings
variables or defines however).
Unless there's a lot more deeper magic than I can fathom, I am guessing
the parser is parsing the directives if only to ignore code in that
directive block.
If this is so (is it?), can't I inject/override some code in there to
emit a token for the directive as well as make it also parse the blocks
it normally would ignore?
Also the tree is not really possible to get a hold of, because a node
(e.g. a fornode for a for-in) might be immediately replaced by a
whilenode thus you'll never see that there was a for-in.
So, I will need to catch things before they get optimized/transformed
into something else.. I love these tricks/traps.. :)
Additionally the parser is not geared towards handling erratic code.
There are quite some places where error recovery is tried so that
errors further down can be displayed, but in essence the parser is
very bad in handling erratic code.
Frankly, I too am not interested in uncompilable code; so I won't mind
if it throws in the towel before attempting to scan everything until the
bitter end.
But, yes, all these shortcuts/pitfalls (for what I want to do) are quite
discouraging, yet the flip-side means any alternative independent of FPC
will always be lacking.
I also want to see how hard it is to turn the compiler into a module
of the frontend (see my text mode hatred) by getting rid of
commandline switches (and also of textmode feedback).
Here I'd suggest you to look at the code of the text mode IDE again.
It compiles the compiler itself and passes its own options set in the
FreeVision TUI to the compiler.
Thank you. I am hoping I will get to that in good time.
Actually, I am surprised that no one (that I know of) has done this yet.
The text mode IDE is doing it...
I meant the GUI ones.
After all, both FPC and all the IDEs (Lazarus, fpGUI, MSEide+MSEgui
etc.) use FPC but the degree of integration between them is lacking,
IMO.
Because by the way it currently is you can easily switch the compiler
version and the compiler target. Each compiled compiler can only
compile for one architecture (but each supported OS of that
architecture), so how would you implement cross platform compilation
then?
Couldn't it be done through DLLs?
I mean, compile the compiler into a dll where the name is an easily
format that tells (say) Lazarus what version it is, and its native and
target platforms are.
At that point, it would need a stable (yet an extendable) API, but it
seems it is doable.
[This, if it works, does not preclude a standalone compiler; a shim-like
exe simply uses one of those DLLs.]
Or, have I just reinforced the assertion that ignorance is bliss? ;)
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus