Since some time I'm trying to separate the syntax from the semantics processing in the parser. It turned out to be quite complicated, so that I want to use some methodology. (Yes, I've been warned ;-)

For profiling and debugging I want to have both the old and new code in the same executable file, so that a commandline option or environment variable can be used to select which "version" to use. Is this feasable, WRT the invocation of fpc with e.g. the test suite? How would you do it?

Furthermore I have no clue how to use new compiler at all. Do I have to rebuild fpc, or how else is the fpc executable (or link?) related to concrete (machine/target specific) compilers?


The separation shall be done in multiple steps. In the first step I'll enclose all semantical code into begin-end, so that it can be easily hidden (folded) in the Lazarus IDE. Later these blocks shall be extended into

  if cond then
    new_proc
  else
  begin
    [old code, also copied into new_proc()]
  end;

This has the advantage over $IF... that the IDE allows to navigate to everything in both if-else branches. It also should allow to apply patches (from updated trunk), to some degree, because the code sequence is not much modified.

The new_proc procedures will be local subroutines first, which can share the local variables of the enclosing parse_... procedure. Later these subroutines will be moved into different units, where they finally are exchangable by changing the searchpath. Here again it's helpful to view both versions in different editor windows, side by side.

For first results see the dodi/parser_rewrite branch.


Perhaps I missed more issues? Any hints are welcome :-)

DoDi

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to