• DoctypeDeclaration{http://etl.sf.net/etl/doctype/0.2.1}:
    • publicId: "-//IDN etl.sf.net//ETL//Grammar 0.2.1"
  • BlankTopLevel{http://etl.sf.net/etl/grammar/0.2.1}:
    • documentation:
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// The statement below is a special blank statement to ensure that it is ignored.
  • Grammar{http://etl.sf.net/etl/grammar/0.2.1}:
    • documentation:
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// This is almost minimal grammar that supports HelloWorld.ej.etl
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// But there are still some features to remove.
    • name:
      • net
      • sf
      • etl
      • tests
      • data
      • MinimalEJ
    • content:
      • Namespace{http://etl.sf.net/etl/grammar/0.2.1}:
        • defaultModifier:
          • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
            • value: default
        • prefix: ej
        • uri: "http://etl.sf.net/2006/samples/ej/0.1"
      • Context{http://etl.sf.net/etl/grammar/0.2.1}:
        • documentation:
          • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
            • text: /// A common context that defines documentation and attributes
        • name: Common
        • content:
          • DocumentationSyntax{http://etl.sf.net/etl/grammar/0.2.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                • text: /// Simple documentation
            • name: Documentation
            • syntax:
              • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                • name: documentation
                • operator: +=
                • expression:
                  • DoclinesOp{http://etl.sf.net/etl/grammar/0.2.1}:
                    • wrapper:
                      • Wrapper{http://etl.sf.net/etl/grammar/0.2.1}:
                        • object:
                          • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                            • prefix: ej
                            • name: DocumentationLine
                        • property: text
          • Attributes{http://etl.sf.net/etl/grammar/0.2.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
                • text: /// Simple attributes definition
            • name: Attributes
            • syntax:
              • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                • name: attributeSets
                • operator: +=
                • expression:
                  • OneOrMoreOp{http://etl.sf.net/etl/grammar/0.2.1}:
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                            • syntax:
                              • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                • name:
                                  • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • prefix: ej
                                    • name: AttributeSet
                                • syntax:
                                  • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • syntax:
                                      • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                            • syntax:
                                              • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • text: @
                                              • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • text: [
                                              • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • name: attributes
                                                • operator: +=
                                                • expression:
                                                  • ListOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                    • separator: ,
                                                    • syntax:
                                                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                        • syntax:
                                                          • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                            • syntax:
                                                              • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                • context: Expression
                                                                • precedence: 100
                                              • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                • text: ]
          • Def{http://etl.sf.net/etl/grammar/0.2.1}:
            • name: IdentifierDef
            • syntax:
              • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                • syntax:
                  • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name:
                      • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                        • prefix: ej
                        • name: Identifier
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: value
                            • operator: =
                            • expression:
                              • IdentifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
        • Context{http://etl.sf.net/etl/grammar/0.2.1}:
          • abstractModifier:
            • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
              • value: abstract
          • name: Classifiers
          • content:
            • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
              • contextName: Common
            • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: ClassStatement
              • syntax:
                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                  • syntax:
                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                          • text: class
                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                  • syntax:
                    • ModifiersOp{http://etl.sf.net/etl/grammar/0.2.1}:
                      • wrapper:
                        • Wrapper{http://etl.sf.net/etl/grammar/0.2.1}:
                          • object:
                            • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                              • prefix: ej
                              • name: Modifier
                          • property: value
                      • modifiers:
                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name: visibilityModifier
                          • operator: =
                          • expression:
                            • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                              • value: public
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: name
                  • operator: =
                  • expression:
                    • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: IdentifierDef
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: contents
                  • operator: +=
                  • expression:
                    • BlockRef{http://etl.sf.net/etl/grammar/0.2.1}:
                      • context: ClassContents
        • Context{http://etl.sf.net/etl/grammar/0.2.1}:
          • documentation:
            • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
              • text: /// Top level context that contains package and class definitions
          • defaultModifier:
            • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
              • value: default
          • name: TopLevel
          • content:
            • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
              • contextName: Classifiers
              • wrappers:
                • Wrapper{http://etl.sf.net/etl/grammar/0.2.1}:
                  • object:
                    • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                      • prefix: ej
                      • name: TopLevelClassifier
                  • property: classifier
            • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: PackageStatement
              • syntax:
                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                  • syntax:
                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                          • text: package
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: name
                  • operator: =
                  • expression:
                    • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                      • context: PackageNameExpression
            • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: BlankTopLevel
        • Context{http://etl.sf.net/etl/grammar/0.2.1}:
          • name: PackageNameExpression
          • content:
            • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
              • contextName: Common
            • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
              • isComposite:
                • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                  • value: composite
              • name: Identifier
              • associativity: f
              • syntax:
                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                  • syntax:
                    • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: IdentifierDef
            • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: AccessOp
              • associativity: yfx
              • precedence: 100
              • text: .
              • syntax:
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: accessed
                  • operator: =
                  • expression:
                    • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                      • position: left
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: feature
                  • operator: =
                  • expression:
                    • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                      • position: right
        • Context{http://etl.sf.net/etl/grammar/0.2.1}:
          • name: TypeExpression
          • content:
            • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
              • contextName: PackageNameExpression
            • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
              • isComposite:
                • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                  • value: composite
              • name: VoidType
              • associativity: f
              • syntax:
                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                  • syntax:
                    • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name:
                        • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                          • prefix: ej
                          • name: PrimitiveType
                      • syntax:
                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: name
                              • operator: =
                              • expression:
                                • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • value: void
            • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
              • isComposite:
                • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                  • value: composite
              • name: ArrayType
              • associativity: f
              • syntax:
                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                  • syntax:
                    • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name:
                        • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                          • prefix: ej
                          • name: PrimitiveType
                      • syntax:
                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: name
                              • operator: =
                              • expression:
                                • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • value: array
            • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
              • isComposite:
                • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                  • value: composite
              • name: ApplySquareOp
              • associativity: yf
              • precedence: 100
              • syntax:
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: functor
                  • operator: =
                  • expression:
                    • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                      • position: left
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: args
                  • operator: +=
                  • expression:
                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                          • text: [
                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • ListOp{http://etl.sf.net/etl/grammar/0.2.1}:
                              • separator: ,
                              • syntax:
                                • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                          • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                            • text: ]
          • Context{http://etl.sf.net/etl/grammar/0.2.1}:
            • name: Expression
            • content:
              • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                • contextName: TypeExpression
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • isComposite:
                  • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                    • value: composite
                • name: StringLiteral
                • associativity: f
                • syntax:
                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: value
                    • operator: =
                    • expression:
                      • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                        • quote: '\"'
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • isComposite:
                  • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                    • value: composite
                • name: ApplyRoundOp
                • associativity: yf
                • precedence: 100
                • syntax:
                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: functor
                    • operator: =
                    • expression:
                      • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                        • position: left
                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: args
                    • operator: +=
                    • expression:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                            • text: (
                          • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                            • syntax:
                              • ListOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                • separator: ,
                                • syntax:
                                  • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • syntax:
                                      • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • syntax:
                                          • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • text: )
            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: Code
              • content:
                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: ExpressionStatement
                  • syntax:
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: expression
                      • operator: =
                      • expression:
                        • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                          • context: Expression
                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: BlankCode
            • Context{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: ClassContents
              • content:
                • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
                  • contextName: Common
                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: MethodStatement
                  • syntax:
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • text: to
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • ModifiersOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • wrapper:
                            • Wrapper{http://etl.sf.net/etl/grammar/0.2.1}:
                              • object:
                                • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • prefix: ej
                                  • name: Modifier
                              • property: value
                          • modifiers:
                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: visibilityModifier
                              • operator: =
                              • expression:
                                • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • value: public
                            • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                              • name: staticModifier
                              • operator: =
                              • expression:
                                • ModifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • value: static
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: returnType
                      • operator: =
                      • expression:
                        • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                          • context: TypeExpression
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: name
                      • operator: =
                      • expression:
                        • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name: IdentifierDef
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: parameters
                      • operator: +=
                      • expression:
                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                          • syntax:
                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • text: (
                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • OptionalOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • syntax:
                                    • ListOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • separator: ,
                                      • syntax:
                                        • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • syntax:
                                                • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                  • name:
                                                    • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • prefix: ej
                                                      • name: Parameter
                                                  • syntax:
                                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • syntax:
                                                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • name: classifier
                                                          • operator: =
                                                          • expression:
                                                            • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • context: TypeExpression
                                                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                          • name: name
                                                          • operator: =
                                                          • expression:
                                                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                              • name: IdentifierDef
                            • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                              • text: )
                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                      • name: body
                      • operator: =
                      • expression:
                        • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name: MethodBlock
                • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: MethodBlock
                  • syntax:
                    • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                      • syntax:
                        • ObjectOp{http://etl.sf.net/etl/grammar/0.2.1}:
                          • name:
                            • ObjectName{http://etl.sf.net/etl/grammar/0.2.1}:
                              • prefix: ej
                              • name: MethodBlock
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: content
                                  • operator: +=
                                  • expression:
                                    • BlockRef{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • context: Code
                • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: BlankClassContent
             1: doctype public "-//IDN etl.sf.net//ETL//Grammar 0.2.1";
             2: /// The statement below is a special blank statement to ensure that it is ignored.
             3: ;
             4: /// This is almost minimal grammar that supports HelloWorld.ej.etl
             5: /// But there are still some features to remove.
             6: grammar net.sf.etl.tests.data.MinimalEJ {
             7: 	namespace default ej = "http://etl.sf.net/2006/samples/ej/0.1";
             8: 	
             9: 	/// A common context that defines documentation and attributes
            10: 	context Common {
            11: 		/// Simple documentation 
            12: 		documentation Documentation {
            13: 			@ documentation += doclines wrapper ej:DocumentationLine.text;
            14: 		};
            15: 
            16: 		/// Simple attributes definition
            17: 		attributes Attributes {
            18: 			@ attributeSets += {
            19: 				^ ej:AttributeSet {
            20: 					% @ % [ {
            21: 						@ attributes += list , {
            22: 							expression(Expression,precedence=100);
            23: 						};
            24: 					} % ];
            25: 				};
            26: 			}+;
            27: 		};
            28: 
            29: 		def IdentifierDef {
            30: 			^ ej:Identifier {
            31: 				@ value = identifier;
            32: 			};
            33: 		};
            34: 	};
            35: 	
            36: 	context abstract Classifiers {
            37: 		include Common;
            38: 
            39: 		statement ClassStatement {
            40: 			% class;
            41: 			modifiers wrapper ej:Modifier.value {
            42: 				@ visibilityModifier = modifier public;
            43: 			};
            44: 			@ name = ref(IdentifierDef);
            45: 			@ contents += block(ClassContents);
            46: 		};
            47: 	};
            48: 	
            49: 	/// Top level context that contains package and class definitions
            50: 	context default TopLevel {
            51: 		include Classifiers wrapper ej:TopLevelClassifier.classifier;
            52: 		
            53: 		statement PackageStatement {
            54: 			% package;
            55: 			@ name = expression(PackageNameExpression);
            56: 		};
            57: 		
            58: 		
            59: 		statement BlankTopLevel {
            60: 		};
            61: 	};
            62: 
            63: 	
            64: 	context PackageNameExpression {
            65: 		include Common;
            66: 				
            67: 		op composite Identifier(f) {
            68: 			ref(IdentifierDef);
            69: 		};
            70: 		
            71: 		op AccessOp(yfx, 100, . ) {
            72: 			@ accessed = left;
            73: 			@ feature = right;
            74: 		};
            75: 	};
            76: 
            77: 	
            78: 	context TypeExpression {
            79: 		include PackageNameExpression;
            80: 		
            81: 		op composite VoidType(f) {
            82: 			^ ej:PrimitiveType {
            83: 				@ name = token(void);
            84: 			};
            85: 		};
            86: 		
            87: 		op composite ArrayType(f) {
            88: 			^ ej:PrimitiveType {
            89: 				@ name = token(array);
            90: 			};
            91: 		};
            92: 		
            93: 		op composite ApplySquareOp(yf, 100) {
            94: 			@ functor = left;
            95: 			@ args += % [ {
            96: 				list , {
            97: 					expression;
            98: 				};
            99: 			} % ];
           100: 		};
           101: 		
           102: 	};
           103: 	
           104: 	context Expression {
           105: 		include TypeExpression;
           106: 
           107: 		op composite StringLiteral(f) {
           108: 			@ value = string(quote='\"');
           109: 		};
           110: 
           111: 		op composite ApplyRoundOp(yf, 100) {
           112: 			@ functor = left;
           113: 			@ args += % ( {
           114: 				list , {
           115: 					expression;
           116: 				};
           117: 			} %);
           118: 		};
           119: 	};
           120: 	
           121: 	context Code {
           122: 		statement ExpressionStatement {
           123: 			@ expression = expression(Expression);
           124: 		};
           125: 		statement BlankCode {
           126: 		};
           127: 	};
           128: 	
           129: 	context ClassContents {
           130: 		include Common;
           131: 		
           132: 		statement MethodStatement {
           133: 			% to;
           134: 			modifiers wrapper ej:Modifier.value {
           135: 				@ visibilityModifier = modifier public;
           136: 				@ staticModifier = modifier static;
           137: 			};
           138: 			@ returnType = expression(TypeExpression);
           139: 			@ name = ref(IdentifierDef);
           140: 			@ parameters += % ( {
           141: 				list , {
           142: 					^ ej:Parameter {
           143: 						@ classifier = expression(TypeExpression);
           144: 						@ name = ref(IdentifierDef);
           145: 					};
           146: 				}?;
           147: 			} % );
           148: 			@ body = ref(MethodBlock);
           149: 		};
           150: 		
           151: 		def MethodBlock {
           152: 			^ ej:MethodBlock {
           153: 				@ content += block(Code);
           154: 			};
           155: 		};
           156: 		
           157: 		statement BlankClassContent {
           158: 		};
           159: 	};
           160: };