https://github.com/simonjwright/libadalang2xml
Author:GPL-3.0-or-later
Version:1.0.2
Alire CI: Dependencies:No dependents.
Badge:
Libadalang2XML is a tool to extract syntatic aspects of Ada source code into XML.
The Ada source is initially read using Libadalang. The resulting tree is then traversed, and its structure output in an XML form.
The document type definition isn’t explicit; it’s simply derived from the tree elements created by Libadalang. Note that Libadalang includes much more semantic information than the surface structure generated by this tool, but nevertheless there’s enough there to — for example — create a scriptable body for a package spec.
Using the standard langkit_support
, libadalang
crates, you must build with LIBRARY_TYPE
set to relocatable
.
You can obtain versions of those crates adjusted to not require those features, which can therefore build the (default) static libraries, by visiting https://github.com/simonjwright/alire-index.mac.
As an example of the output, this code
package Demo is
procedure Square (X : in out Integer);
end Demo;
generates
<CompilationUnit>
<AdaNodeList/>
<LibraryItem>
<PrivateAbsent/>
<PackageDecl>
<DefiningName>
<Id>Demo</Id>
</DefiningName>
<PublicPart>
<AdaNodeList>
<SubpDecl>
<OverridingUnspecified/>
<SubpSpec>
<SubpKindProcedure>procedure</SubpKindProcedure>
<DefiningName>
<Id>Square</Id>
</DefiningName>
<Params>
<ParamSpecList>
<ParamSpec>
<DefiningNameList>
<DefiningName>
<Id>X</Id>
</DefiningName>
</DefiningNameList>
<AliasedAbsent/>
<ModeInOut>in out</ModeInOut>
<SubtypeIndication>
<NotNullAbsent/>
<Id>Integer</Id>
</SubtypeIndication>
</ParamSpec>
</ParamSpecList>
</Params>
</SubpSpec>
</SubpDecl>
</AdaNodeList>
</PublicPart>
<EndName>
<Id>Demo</Id>
</EndName>
</PackageDecl>
</LibraryItem>
<PragmaNodeList/>
</CompilationUnit>