vtereshkov / xdpw

XD Pascal: A small embeddable self-hosting Pascal compiler for Windows. Supports Go-style methods and interfaces
BSD 2-Clause "Simplified" License
274 stars 32 forks source link

Implement abstract syntax tree #11

Open vtereshkov opened 4 years ago

vtereshkov commented 4 years ago

Currently XD Pascal generates machine instructions 'on-the-fly', like almost all early Pascal compilers, including Turbo Pascal. But building an AST can help perform larger-scale optimizations than those (peephole) optimizations available now.

Moreover, using an AST will eliminate the need for the clumsy MakeCStack procedure designed to deal with stdcall and cdecl functions.

Last but not least, it would probably help correctly compile expressions like a.f(x)^.b. Now it's a syntax error because the parser does not know when parsing f(x) whether its result is dereferenced (and so becomes a 'designator') or not (and so becomes a 'factor').