Scoping problem [message #754586] |
Thu, 03 November 2011 12:14 |
Joacim Messages: 1 Registered: November 2011 |
Junior Member |
|
|
Hi, we have some problems with scoping in our DSL.
Here is our full grammar:
Configuration:
(namespace = Namespace)
//('import' Imports)*
(elements += Element)*
;
Namespace:
name = ID
;
/*
Imports:
'import' ImportsDef (',' ImportsDef)* // Doesn't work!?
;
ImportsDef:
imports += [Namespace]
;
*/
Element:
attributeDefinitions += AttributeDefinition
| objectDefinitions += ObjectDefinition
;
AttributeDefinition:
'*' name = ID '(' type = AttributeType ')'
(translation += Translation)*
(possibleValues += PossibleValues
| defaultValue += DefaultValue
| (internalProperties += InternalProperty)
| ('-' (externalProperty += ExternalProperty)))*
;
AttributeReference:
'*' name = [AttributeDefinition|ID]
(attrTranslation += AttributeTranslation)*
((overloadedProperties += InternalProperty)
| ('-' (externalProperty += ExternalProperty)))*
;
PossibleValues:
'=' (possibleValuesDefaultValue = [PossibleValuesValue|Type])? '(' values += PossibleValuesValue (',' values += PossibleValuesValue)* ')'
;
DefaultValue:
'=' value = Type
;
PossibleValuesValue:
name = Type
;
ObjectDefinition:
'[' name = ID ']' (translation += Translation)*
(('-' (externalProperty += ExternalProperty)+)
//| (linkedAttributeDefinition += AttributeDefinition)
| (referencedAttribute += AttributeReference))*
;
ExternalProperty:
// AttributeInternalPropertyValue and ObjectAttributeInternalPropertyValue required otherwise we cant have external properties like 'required', 'readOnly' etc
name = ExternalPropertyName ('=' value = Type)? // Not complete, need more information
;
ExternalPropertyName:
(ID | InternalPropertyValue | AttributeInternalPropertyValue) ('.' LANGCODE)?
;
Translation:
name = LANGCODE ':' value = STRING
;
AttributeTranslation:
name = LANGCODE ':' value = STRING
;
/*
ExternalPropertyValue:
;
*/
InternalProperty:
name = (AttributeInternalPropertyValue | InternalPropertyValue) ('=' value = Boolean)?
;
InternalPropertyValue:
'logged'
| 'readOnly'
| 'required'
| 'indexed'
;
AttributeInternalPropertyValue:
'multiValued'
| 'protected'
;
Boolean:
'true'
| 'false'
;
Type:
STRING
| '-'? INT
| Boolean
;
AttributeType:
'string'
| 'double'
| 'date'
| 'long'
| 'boolean'
| 'objref'
;
terminal LANGCODE : ('a'..'z')('a'..'z');
This is the code we are trying to run in our DSL:
demo
* valuta (double) sv:"valuta" en:"currency"
required indexed readOnly
= "fredag" ("måndag", "tisdag","onsdag", "torsdag", "fredag", "lördag" , "söndag")
* day (string) sv:"Dag" en:"Day"
= "fredag" ("måndag", "tisdag","onsdag", "torsdag", "fredag", "lördag" , "söndag")
* name (string) sv:"Förnamn" en:"First name"
required
- fieldLength=14
= 0
* attribute (long)
= 1 (2, 4, 1, -2)
[object] // <----- ObjectDefinition
- mailFromAddress="a_mail@adress.se"
* valuta sv:"hej" // <----- AttributeRefrence
logged // <----- This one....
* day // <------ AttributeRefrence
logged // <----- collides with this one (error: Duplicate InternalProperty logged)
* name
required=false logged
* attribute
[testObj] sv:"Ett test" en:"A test"
- extAttr='någonting'
- aTrueExtAttr
* valuta sv:"PENGAR" en:"Money"
We think it's beacause all the AttributeRefrences shares the same scope (the scope of the ObjectDefinition).
How do we create a new scope for each AttributeReference?
|
|
|
|
Powered by
FUDForum. Page generated in 0.03450 seconds