module languages/fdl/syntax/Expressions

imports languages/fdl/syntax/Layout
	languages/fdl/syntax/Names

exports

sorts FeatureName AtomicFeature FeatureExpression FeatureExpressionList

context-free syntax
	"all" "(" {FeatureExpression ","}+ ")" -> FeatureExpression {cons("all")}
	"one-of" "(" {FeatureExpression ","}+ ")" -> FeatureExpression {cons("one-of")}
	"more-of" "(" {FeatureExpression ","}+ ")" -> FeatureExpression {cons("more-of")}
	FeatureName -> FeatureExpression {cons("featurename")}
	AtomicFeature -> FeatureExpression {cons("atomicfeature")}
	FeatureExpression "?" -> FeatureExpression {cons("optional")}
	"default" "=" AtomicFeature -> FeatureExpression {cons("default")}
	"..." -> AtomicFeature {cons("dots")}

aliases
	{FeatureExpression ","}+ -> FeatureExpressionList