Skip to main content

This module provides a get_tree function to obtain an ANTLR parse-tree from a UVL-defined feature model

Project description

UVL parser

Documentation

Documentation for UVL can be found in the project's wiki

Dev

This python UVL parser for flamapy project is generated by ANTLR from the UVL.g4 file, where the grammar is defined. In order to generate the UVL*.py files, first we need to install antlr python runtime:

pip install antlr4-python3-runtime

Then, this command should generate the files we need for the parser to work:

antlr4 -Dlanguage=Python3 -no-listener UVL.g4

With this, any grammar change or update done to the UVL.g4 file will be effective.

Usage and integration

With the grammar defined and the parser generated, get_tree.py gives us a method that, returns a ParseTree object given an uvl file via absolute path. ParseTree is an ANTLR object which represents an AST-ish structure of the file we read with the defined grammar.

This file performs a transformation from an ANTLR ParseTree to a fm_metamodel-structured FM. Pretty much every way to obtain data from this ParseTree can be seen there. However, we will give some insight into its structure for easier usage and integration.

First, these dependencies must be installed:

apt install antlr4
pip3 install antlr-denter

Now, after getting our ParseTree object from the parser:

Features and relations

root_feature = parse_tree.features().child() #Returns a ChildContext object which contains the model root feature

For any ChildContext object:

child_context.feature_spec() # Returns the feature contained in the node
child_context.feature_spec().ref() # From the feature, return the node containing its name
child_context.feature_spec().ref().WORD()[0].getText() # From feature ref, obtain its actual name. We have to get the first element from WORD() as, in imports (yet to be supported), multiple WORDs are allowed on the same ref. getText() function returns a string with the text from the node called.

child_context.feature_spec().relation() # Returns the list of RelationContext objects children of the feature called

For any RelationContext object:

relation_context.relation_spec() # Return the node containing the relation
relation_context.relation_spec().RELATION_WORD().getText() # Return a string containing the relation's name
relation_context.relation_spec().child() # Return the list of ChildContext objects the relation is parent of, with each one being processed as described above

Constraints

constraints_node = parse_tree.constraints() # Returns ConstraintsContext object
constraints_node.constraint() # Returns list of ConstraintContext objects, with each node containing a constraint

For any ConstraintContext object:

list(constraint_context.getChildren())[0] # Returns the constraint itself, it is a bit tricky due to its structure in the parser
constraint.WORD[0].getText() # Returns the left node of the constraint, [1] returns the right node
constraint.getChild(1).getText() # Returns constraint operator

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uvlparser-1.1.0.dev0.tar.gz (15.1 kB view details)

Uploaded Source

Built Distribution

uvlparser-1.1.0.dev0-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file uvlparser-1.1.0.dev0.tar.gz.

File metadata

  • Download URL: uvlparser-1.1.0.dev0.tar.gz
  • Upload date:
  • Size: 15.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for uvlparser-1.1.0.dev0.tar.gz
Algorithm Hash digest
SHA256 bae58437b379859e1ec3829aaa87f71f41b3e0c5692e47a0b2d5da29f27b49d1
MD5 f3d63d452dd03860026e3efbc069681b
BLAKE2b-256 2cdacb489898fa492710dfc9ce07db0af7d4f194e5cc84b89b827d7bb82244e7

See more details on using hashes here.

File details

Details for the file uvlparser-1.1.0.dev0-py3-none-any.whl.

File metadata

File hashes

Hashes for uvlparser-1.1.0.dev0-py3-none-any.whl
Algorithm Hash digest
SHA256 832ef0ac7a9e57c8b025cff0e9edc5234d81bbe78b029a2a7dbada7e52123f49
MD5 65ec089be84d536e7f77481bf5646935
BLAKE2b-256 c1493f22b9bffdf2de482789dfb64d485e10f8fc4a0986eedf3159ca7c0a940d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page