Skip to content

Decoupling feature name uniqueness from grammar to support Generalized Feature Trees (GFTs) #69

@jmhorcas

Description

@jmhorcas

Context

I would like to raise a question/proposal regarding the official UVL specification concerning feature naming. Currently, there is some ambiguity about whether the requirement for unique feature names should be enforced at the parser level (grammar) or as a semantic check at the tool level.

The Issue

In standard Feature Models (FMs), it is common practice to require unique names. However, enforcing this strictly within the UVL grammar prevents the representation of Generalized Feature Trees (GFTs).

In GFTs, a feature can appear multiple times in different branches of the tree (for instance, separated by an alternative or xor group). This structure is often used to simplify models by converting cross-tree constraints into tree structures or for specific parallel analysis techniques.

If the UVL parser rejects duplicate names, it limits the language's expressiveness for these advanced modeling use cases.

Supporting Evidence & References

The use of GFTs is documented in several publications and there are already datasets in UVL format that utilize this structure:

Key Publications

  • Horcas, J. M., et al. (2025). FMSans: An efficient approach for constraints removal and parallel analysis of feature models. Journal of Systems and Software. DOI: 10.1016/j.jss.2025.112434
  • Van den Broek, P., & Galvão, I. (2009). Analysis of feature models using generalised feature trees. VaMoS '09. Link to PDF
  • Van den Broek, P., et al. (2008). Elimination of constraints from feature trees. ASPL @ SPLC’08.

Real-world Data

Proposal

  1. Grammar level: The UVL grammar should allow multiple features to share the same name/identifier.
  2. Tool level: The responsibility for checking name uniqueness should be shifted to the analysis tools or compilers. This allows "Standard UVL" tools to throw an error if they require uniqueness, while "GFT-compliant" tools can process the model correctly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions