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 - Universal Variability Language

UVL (Universal Variability Language) is a concise and extensible language for modeling variability in software product lines. It supports multiple programming languages and provides a grammar-based foundation for building tools and parsers.

This repository contains the ANTLR4 grammar files for UVL. With these, you can generate parsers for UVL tailored to specific programming languages like Java, JavaScript, and Python.

✨ Key Features

  • Language-level modularity
  • Namespaces and imports
  • Feature trees with attributes and cardinalities
  • Cross-tree constraints
  • Extensible for different target languages

📦 Repository Structure

  • uvl/UVLParser.g4 – Base grammar in EBNF form
  • uvl/UVLLexer.g4 – Base lexer grammar for UVL
  • uvl/Java/UVLJava*.g4, uvl/Python/UVLPython*.g4, etc. – Language-specific grammar files
  • java/ – Java-based parser implementation using Maven
  • python/ – Python-based parser implementation
  • javascript/ – JavaScript-based parser implementation
  • tests/ – UVL test cases for validation

UVL uses ANTLR4 as its parser generator.


💡 Language Overview

Each UVL model may consist of five optional sections:

  1. Language levels: Enable optional concepts via include keyword.
  2. Namespace: Allows referencing the model from other UVL models.
  3. Imports: Include other feature models (e.g., subdir.filename as fn).
  4. Feature tree: Hierarchical features with cardinalities, attributes, and group types (mandatory, optional, or, alternative).
  5. Cross-tree constraints: Logical and arithmetic constraints among features.

🔍 Example

namespace Server

features
  Server {abstract}
    mandatory
      FileSystem
        or
          NTFS
          APFS
          EXT4
      OperatingSystem {abstract}
        alternative
          Windows
          macOS
          Debian
    optional
      Logging {
        default,
        log_level "warn"
      }

constraints
  Windows => NTFS
  macOS => APFS

Explanation:

  • Server is an abstract feature.
  • It must include a FileSystem and an OperatingSystem.
  • Logging is optional and includes an attribute.
  • Logical constraints define dependencies between features.

🔗 More examples: https://github.com/Universal-Variability-Language/uvl-models/tree/main/Feature_Models


Usage

To use UVL in your projects, you can either:

  1. Use the pre-built parsers

    Java Parser

    Include the following dependency in your Maven project:
    <dependency>
        <groupId>io.github.universal-variability-language</groupId>
        <artifactId>uvl-parser</artifactId>
        <version>0.3</version>
    </dependency>
    

    Python Parser

    Install the package via pip:
    pip install uvlparser
    

    JavaScript Parser

    Install the package via npm:
    npm install uvl-parser
    
  2. Build the parser manually See the sections below for details.

⚙️ Building the Parser manually

Java Parser

Prerequisites

Build Steps

  1. Clone the repository:
 git clone https://github.com/Universal-Variability-Language/uvl-parser
  1. Build the parser:
 cd java
 mvn clean package
  1. Include the generated JAR in your Java project.

📚 Resources

UVL Models & Tools

Tooling Ecosystem


📖 Citation

If you use UVL in your research, please cite:

@article{UVL2024,
  title     = {UVL: Feature modelling with the Universal Variability Language},
  journal   = {Journal of Systems and Software},
  volume    = {225},
  pages     = {112326},
  year      = {2025},
  issn      = {0164-1212},
  doi       = {https://doi.org/10.1016/j.jss.2024.112326},
  url       = {https://www.sciencedirect.com/science/article/pii/S0164121224003704},
  author    = {David Benavides and Chico Sundermann and Kevin Feichtinger and José A. Galindo and Rick Rabiser and Thomas Thüm},
  keywords  = {Feature model, Software product lines, Variability}
}

📬 Contact & Contributions

Feel free to open issues or pull requests if you have suggestions or improvements. For questions or collaboration inquiries, visit the UVL Website: https://universal-variability-language.github.io/

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

uvlparser-2.5.0.tar.gz (29.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

uvlparser-2.5.0-py3-none-any.whl (29.9 kB view details)

Uploaded Python 3

File details

Details for the file uvlparser-2.5.0.tar.gz.

File metadata

  • Download URL: uvlparser-2.5.0.tar.gz
  • Upload date:
  • Size: 29.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for uvlparser-2.5.0.tar.gz
Algorithm Hash digest
SHA256 fc6ea8d83be9a6eba17babffe79e369f0b8984493b1b5f2eed7b8952e01385b8
MD5 4e62523dec0eaa06befbddfad46f4963
BLAKE2b-256 519e803d5dcba1884597752ff9e322824289254de45ca62387e8b3cd1cf0609a

See more details on using hashes here.

File details

Details for the file uvlparser-2.5.0-py3-none-any.whl.

File metadata

  • Download URL: uvlparser-2.5.0-py3-none-any.whl
  • Upload date:
  • Size: 29.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for uvlparser-2.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 783391510eb9379a5a7d4a8c1d1df2f0f90060e1c2480819855966667d93c502
MD5 44fb3711446e3a1e9bfde3a787cbc2ee
BLAKE2b-256 c364282bbed99b1ed18d99f95e1b9960723041c98eb954c1f0d343c363c90a83

See more details on using hashes here.

Supported by

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