Update: This is a maintained fork of Roman Yankovsky's original, intended to collect useful fixes from open upstream pull requests and active forks while upstream review is quiet. New pull requests are welcome here.
This branch has merged and validated these open pull requests from RomanYankovsky/DelphiAST:
- PR #341, "Fix parsing expression after record align", from
UweRaabe:Fix_RecordAlign_with_value_expressionby UweRaabe. - PR #337, "Fix Multiline parsing error #336", from
UweRaabe:Fix_Multiline_parsing_error_#336by UweRaabe. - PR #313, "Log encoding errors as problems", from
luebbe:masterby luebbe. - PR #268, "Helper method calls on literals don't cause parser errors anymore", from
Wosi:LiteralHelpersby Wosi. - PR #231, "Suggested fixes for most of the issues I reported", from
JBontes:masterby JBontes.
With DelphiAST you can take real Delphi code and get an abstract syntax tree. One unit at time and without a symbol table though.
Compatible with Delphi, FreePascal, & Lazarus.
The headless suite runs the same shared tests with separate Delphi and FPC console
projects. It parses every file in Test/Snippets and performs focused assertions
against parser behavior, AST structure, error handling, source positions, and XML
output.
With FPC installed, compile and run the suite from the repository root:
mkdir -p build/fpc-tests/units
fpc -B -Mdelphi \
-FuSource -FuSource/SimpleParser -FiSource/SimpleParser \
-FuSource/FreePascalSupport \
-FuSource/FreePascalSupport/FPC_StringBuilder/Src \
-FuTest/UnitTests -FUbuild/fpc-tests/units -FEbuild/fpc-tests \
Test/UnitTests/DelphiASTTests.lpr
build/fpc-tests/DelphiASTTests Test/SnippetsFor Delphi, build Test/UnitTests/DelphiASTTests.dproj and pass the path to
Test/Snippets as the executable's first argument. The original interactive test
application remains available under Test/GUI.
unit Unit1;
interfaceuses
Unit2;
functionSum(A, B: Integer): Integer;
implementationfunctionSum(A, B: Integer): Integer;
begin
Result := A + B;
end;
end.<UNITline="1"col="1"name="Unit1">
<INTERFACEbegin_line="3"begin_col="1"end_line="10"end_col="1">
<USESbegin_line="5"begin_col="1"end_line="8"end_col="1">
<UNITline="6"col="3"name="Unit2"/>
</USES>
<METHODbegin_line="8"begin_col="1"end_line="10"end_col="1"kind="function"name="Sum">
<PARAMETERSline="8"col="13">
<PARAMETERline="8"col="14">
<NAMEline="8"col="14"value="A"/>
<TYPEline="8"col="20"name="Integer"/>
</PARAMETER>
<PARAMETERline="8"col="17">
<NAMEline="8"col="17"value="B"/>
<TYPEline="8"col="20"name="Integer"/>
</PARAMETER>
</PARAMETERS>
<RETURNTYPEline="8"col="30">
<TYPEline="8"col="30"name="Integer"/>
</RETURNTYPE>
</METHOD>
</INTERFACE>
<IMPLEMENTATIONbegin_line="10"begin_col="1"end_line="17"end_col="1">
<METHODbegin_line="12"begin_col="1"end_line="17"end_col="1"kind="function"name="Sum">
<PARAMETERSline="12"col="13">
<PARAMETERline="12"col="14">
<NAMEline="12"col="14"value="A"/>
<TYPEline="12"col="20"name="Integer"/>
</PARAMETER>
<PARAMETERline="12"col="17">
<NAMEline="12"col="17"value="B"/>
<TYPEline="12"col="20"name="Integer"/>
</PARAMETER>
</PARAMETERS>
<RETURNTYPEline="12"col="30">
<TYPEline="12"col="30"name="Integer"/>
</RETURNTYPE>
<STATEMENTSbegin_line="13"begin_col="1"end_line="15"end_col="4">
<ASSIGNline="14"col="3">
<LHSline="14"col="3">
<IDENTIFIERline="14"col="3"name="Result"/>
</LHS>
<RHSline="14"col="13">
<EXPRESSIONline="14"col="13">
<ADDline="14"col="15">
<IDENTIFIERline="14"col="13"name="A"/>
<IDENTIFIERline="14"col="17"name="B"/>
</ADD>
</EXPRESSION>
</RHS>
</ASSIGN>
</STATEMENTS>
</METHOD>
</IMPLEMENTATION>
</UNIT>Copyright (c) 2014-2020 Roman Yankovsky (roman@yankovsky.me) et al
DelphiAST is released under the Mozilla Public License, v. 2.0
See LICENSE for details.
