• DoctypeDeclaration{http://etl.sf.net/etl/doctype/0.2.1}:
    • publicId: "-//IDN etl.sf.net//ETL//Grammar 0.2.1"
  • Grammar{http://etl.sf.net/etl/grammar/0.2.1}:
    • documentation:
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// This is an expression grammar is imported from main grammars
      • DocumentationLine{http://etl.sf.net/etl/grammar/0.2.1}:
        • text: /// In its turn, this grammar imports main grammar.
    • name:
      • net
      • sf
      • etl
      • tests
      • data
      • imports
      • ExpressionGrammar
    • 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: i
        • uri: "http://etl.sf.net/2006/samples/imports/Expression/0.1"
      • GrammarImport{http://etl.sf.net/etl/grammar/0.2.1}:
        • name: main
        • systemId: "MainGrammar.g.etl"
      • Context{http://etl.sf.net/etl/grammar/0.2.1}:
        • name: Expressions
        • content:
          • ContextImport{http://etl.sf.net/etl/grammar/0.2.1}:
            • localName: statements
            • contextName: Statements
            • grammarName: main
          • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
            • isComposite:
              • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                • value: composite
            • name: BlockExpression
            • associativity: f
            • 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: statements
          • 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:
              • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                • name: name
                • operator: =
                • expression:
                  • IdentifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
            • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
              • isComposite:
                • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
                  • value: composite
              • name: IntegerLiteral
              • associativity: f
              • syntax:
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: value
                  • operator: =
                  • expression:
                    • IntegerOp{http://etl.sf.net/etl/grammar/0.2.1}:
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • name: UnaryMinusOp
                • associativity: fy
                • precedence: 16#C8#
                • text: -
                • syntax:
                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: value
                    • operator: =
                    • expression:
                      • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                        • position: right
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • name: UnaryPlusOp
                • associativity: fy
                • precedence: 200
                • text: +
                • syntax:
                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: value
                    • operator: =
                    • expression:
                      • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                        • position: right
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • name: MultiplyOp
                • associativity: yfx
                • precedence: 400
                • text: *
                • syntax:
                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: multipliers
                    • 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: multipliers
                    • operator: +=
                    • expression:
                      • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                        • position: right
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • name: DivideOp
                • associativity: yfx
                • precedence: 400
                • text: /
                • syntax:
                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: dividend
                    • 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: divisor
                    • operator: =
                    • expression:
                      • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                        • position: right
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • name: ReminderOp
                • associativity: yfx
                • precedence: 400
                • text: %
                • syntax:
                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: dividend
                    • 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: divisor
                    • operator: =
                    • expression:
                      • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                        • position: right
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • name: PlusOp
                • associativity: yfx
                • precedence: 500
                • text: +
                • syntax:
                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: summands
                    • 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: summands
                    • operator: +=
                    • expression:
                      • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                        • position: right
              • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                • name: MinusOp
                • associativity: yfx
                • precedence: 500
                • text: -
                • syntax:
                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: minuend
                    • 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: subtrahend
                    • operator: =
                    • expression:
                      • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                        • position: right
           1: doctype public "-//IDN etl.sf.net//ETL//Grammar 0.2.1";
           2: /// This is an expression grammar is imported from main grammars
           3: /// In its turn, this grammar imports main grammar.
           4: grammar net.sf.etl.tests.data.imports.ExpressionGrammar {
           5: 	namespace default i = "http://etl.sf.net/2006/samples/imports/Expression/0.1";
           6: 	import main = "MainGrammar.g.etl";
           7: 	
           8: 	context Expressions {
           9: 		import statements = Statements from main;
          10: 		
          11: 		op composite BlockExpression(f) {
          12: 			@ content += block(statements);
          13: 		};
          14: 
          15: 		op composite Identifier(f) {
          16: 			@ name = identifier;
          17: 		};
          18: 
          19: 		op composite IntegerLiteral(f) {
          20: 			@ value = integer;
          21: 		};
          22: 
          23: 		// priority = 200 below, it here just to check if based number 
          24: 		// works.
          25: 		op UnaryMinusOp(fy,16#C8#,-) {
          26: 			@ value =right;
          27: 		};
          28: 		
          29: 		op UnaryPlusOp(fy,200,+) {
          30: 			@ value =right;
          31: 		};
          32: 		
          33: 		op MultiplyOp(yfx,400,*) {
          34: 			@ multipliers += left; @ multipliers +=right;
          35: 		};
          36: 		
          37: 		op DivideOp(yfx,400,/) {
          38: 			@ dividend = left; @ divisor=right;
          39: 		};
          40: 		
          41: 		op ReminderOp(yfx,400,%) {
          42: 			@ dividend = left; @ divisor=right;
          43: 		};
          44: 		
          45: 		op PlusOp(yfx,500,+) {
          46: 			@ summands += left; @ summands += right;
          47: 		};
          48: 		
          49: 		op MinusOp(yfx,500,-) {
          50: 			@ minuend=left; @ subtrahend=right;
          51: 		};
          52: 	};
          53: };