This is an early version of Bruker's TOPAS macro language parser. This macro language is used by commercial and academic TOPAS code. We have compared two canonical parsing approaches for Python, lark vs. pyparsing, and ended up with pyparsing being more convenient for debugging.
pip install .
Install package with optional dependencies with pip install -e .[lint,test,release]
Parse a TOPAS macro language node with:
echo "xdd { 42 }" | topas2json - | json2topas -More specifically, parse TOPAS input and convert it to JSON with:
import json from pytopas import TOPASParser src = "a(b,c)" tree = TOPASParser.parse(src) print(json.dumps(tree))Convert parser's JSON-encoded TOPAS code back into the TOPAS input format:
import json from pytopas import TOPASParseTree input_json = """ ["topas", ["formula", ["func_call", "a", ["formula", ["p", {"n": ["parameter_name", "b"]}]], ["formula", ["p", {"n": ["parameter_name", "c"]}]]]]] """ serialized = json.loads(input_json) src = TOPASParser.reconstruct(serialized) print(src)After installing the package, two command line utilities will be available.
usage: topas2json [-h] [--ignore-warnings] file Parse TOPAS input and output JSON positional arguments: file Path to TOPAS file or '-' for stdin input options: -h, --help show this help message and exit --ignore-warnings Don't print parsing warnings usage: json2topas [-h] file Parse JSON input and output TOPAS positional arguments: file Path to JSON file or '-' for stdin input options: -h, --help show this help message and exit Author Sergey Korolev, Tilde Materials Informatics
Copyright 2023 BASF SE
BSD 3-Clause