Python wrapper for XML output generator for Open Fortran Parser
Project description
XML output generator for Open Fortran Parser
Implementation has 2 parts: the XML generator written in Java, and Python wrapper for the generator.
In this file, first the Java implementation is described and then the Python wrapper.
Java XML generator for OFP
This is an extension of Open Fortran Parser (OFP), which outputs abstract syntaxt tree (AST) of parsed Fortran file in XML format - to a file or to System.out.
dependencies
Open Fortran Parser 0.8.4-1
https://github.com/mbdevpl/open-fortran-parser/releases/tag/v0.8.4-1
This is a patched version of OFP. Specifically, FortranParserActionPrint class in OFP could not be properly subclassed due to access levels of members of that class, so for example writing my own printer would introduce a lot of code duplication. Patch resolves this, without affecting any functionality.
The patch also resolves an issue when compiling with recent GCC versions.
ANTRL 3.3 (dependency of Open Fortran Parser)
Apache Commons CLI 1.4 (or later)
https://commons.apache.org/proper/commons-cli/download_cli.cgi
how to build
Get dependencies, either manually, or using the provided script:
python3 open_fortran_parser/dev_dependencies.py
export CLASSPATH="${CLASSPATH}:$(pwd)/lib/*"
Build:
ant
export CLASSPATH="${CLASSPATH}:$(pwd)/dist/*"
This will create a .jar file in dist directory.
how to run
java fortran.ofp.FrontEnd --class fortran.ofp.XMLPrinter \
--output output.xml --verbosity 0~100 input.f
where:
The
--verbosity
flag controls verbosity of the parse tree. Defaluts to100
when omitted.Maximum,
100
, means that all details picked up by Open Fortran Parser will be preserved.Minimum,
0
, means that tree will contain only what is needed to reconstruct the program without changing it’s meaning.
The
--output
flag controls where the XML should be written. Defaults to standard output when omitted.
and remaining command-line options are exactly as defined in OFP 0.8.4.
To parse some_fortran_file.f
and save XML output in tree.xml
with minimum verbosity:
java fortran.ofp.FrontEnd --class fortran.ofp.XMLPrinter \
--output tree.xml --verbosity 0 some_fortran_file.f
And to dump XML with maximum verbosity to console:
java fortran.ofp.FrontEnd --class fortran.ofp.XMLPrinter \
--verbosity 100 some_fortran_file.f
AST specification
In progress.
Root node is <ofp>
, it has one subnode <file>
.
Python wrapper for the generator
Using the wrapper should not require any special knowledge about the generator itself, other than knowing the abstract syntax tree (AST) specification.
dependencies
Java Runtime Environment (JRE).
Python version >= 3.6.
Python libraries as specified in requirements.txt.
Building and running tests additionally requires packages listed in test_requirements.txt.
how to build
- pip3 install -U -r test_requirements.txt
python3 setup.py sdist --formats=gztar,zip
python3 setup.py bdist_wheel
how to run
The wrapper can be used as a script, or as a library.
Before running, however, please make sure that dependencies are configured correctly. You can do that by either following the “how to build” section for Java implementation above, or by executing this:
python3 open_fortran_parser/dependencies.py
export CLASSPATH="${CLASSPATH}:$(pwd)/lib/*"
as script
$ python3 -m open_fortran_parser -h
usage: open_fortran_parser [-h] [-v VERBOSITY] input [output]
Python wrapper around XML generator for Open Fortran Parser 0.8.4
positional arguments:
input path to Fortran source code file
output writable path for where to store resulting XML,
defaults to stdout if no path provided (default: None)
optional arguments:
-h, --help show this help message and exit
-v VERBOSITY, --verbosity VERBOSITY
level of verbosity, from 0 to 100 (default: 100)
Copyright 2017 Mateusz Bysiek https://mbdevpl.github.io/, Apache License 2.0
as library
from open_fortran_parser import parse
xml = parse('my_legacy_code.f', verbosity=0)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for open-fortran-parser-0.1.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9db840f672d440d7809dcaf6656ac05444a580901602a403c6e3d35b241af1b6 |
|
MD5 | 2ce2932bbe4fc3dbd9d6bf1c662aa367 |
|
BLAKE2b-256 | e95c7d93754a23709965c5933431408145d74f7fe74ab7dcbbb6c8591b06c1d4 |
Hashes for open_fortran_parser-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 46c3df6317793aa8ff70fe9d44352c3d354636e25dc4320b8bd4b419e20b0995 |
|
MD5 | b5a4d85692149d6560fcc344388e3535 |
|
BLAKE2b-256 | 617dae96882018032e8649c2ca2ddfe6e76828aa99956a3083df0aa89d6bd6eb |