• 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}:
    • name:
      • calculator
      • CalculatorVars
    • content:
      • GrammarInclude{http://etl.sf.net/etl/grammar/0.2.1}:
        • systemId: "calculator-arith-0_2_1.g.etl"
      • Namespace{http://etl.sf.net/etl/grammar/0.2.1}:
        • prefix: t
        • uri: "http://etl.sf.net/samples/calculator"
      • Namespace{http://etl.sf.net/etl/grammar/0.2.1}:
        • prefix: m
        • uri: "http://etl.sf.net/samples/calculator/meta"
      • Namespace{http://etl.sf.net/etl/grammar/0.2.1}:
        • defaultModifier:
          • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
            • value: default
        • prefix: v
        • uri: "http://etl.sf.net/samples/calculator/vars"
      • Context{http://etl.sf.net/etl/grammar/0.2.1}:
        • abstractModifier:
          • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
            • value: abstract
        • name: MetaInformation
        • content:
          • Def{http://etl.sf.net/etl/grammar/0.2.1}:
            • name: ExpressionDef
            • syntax:
              • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                • syntax:
                  • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
                    • context: Expressions
          • Def{http://etl.sf.net/etl/grammar/0.2.1}:
            • name: NameDef
            • 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: v
                        • name: Name
                    • syntax:
                      • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                        • syntax:
                          • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                            • syntax:
                              • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                • options:
                                  • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • syntax:
                                      • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • name: literal
                                        • operator: =
                                        • expression:
                                          • IdentifierOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • options:
                                    • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                                      • syntax:
                                        • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • name: quoted
                                          • operator: =
                                          • expression:
                                            • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • prefix:
                                                • Q
                                                • q
                                              • quote: "'"
            • DocumentationSyntax{http://etl.sf.net/etl/grammar/0.2.1}:
              • 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: m
                              • name: DocumentationLine
                          • property: text
            • Attributes{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: Annotations
              • syntax:
                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: annotations
                  • operator: +=
                  • expression:
                    • ZeroOrMoreOp{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: @
                            • 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: m
                                      • name: Annotation
                                  • 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:
                                            • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                              • name: NameDef
                                        • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                          • syntax:
                                            • OptionalOp{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: (
                                                    • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • name: arguments
                                                      • operator: +=
                                                      • expression:
                                                        • 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:
                                                                        • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                                                          • name: ExpressionDef
                                                    • KeywordStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                                                      • text: )
        • Context{http://etl.sf.net/etl/grammar/0.2.1}:
          • defaultModifier:
            • Modifier{http://etl.sf.net/etl/grammar/0.2.1}:
              • value: default
          • name: Expressions
          • content:
            • ContextInclude{http://etl.sf.net/etl/grammar/0.2.1}:
              • contextName: MetaInformation
            • Def{http://etl.sf.net/etl/grammar/0.2.1}:
              • name: ExpressionDef
              • syntax:
                • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                  • syntax:
                    • ExpressionRef{http://etl.sf.net/etl/grammar/0.2.1}:
              • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                • name: VarStatement
                • syntax:
                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: type
                    • operator: =
                    • expression:
                      • ChoiceOp{http://etl.sf.net/etl/grammar/0.2.1}:
                        • options:
                          • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                            • value: var
                        • options:
                          • TokenOp{http://etl.sf.net/etl/grammar/0.2.1}:
                            • value: let
                  • 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: NameDef
                  • ExpressionStatement{http://etl.sf.net/etl/grammar/0.2.1}:
                    • syntax:
                      • OptionalOp{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: =
                              • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                • name: value
                                • operator: =
                                • expression:
                                  • ExpressionRef{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: Name
                  • 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: NameDef
                • Def{http://etl.sf.net/etl/grammar/0.2.1}:
                  • name: SequenceDef
                  • 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: t
                              • name: Sequence
                          • syntax:
                            • Sequence{http://etl.sf.net/etl/grammar/0.2.1}:
                              • syntax:
                                • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                  • name: statements
                                  • operator: +=
                                  • expression:
                                    • BlockRef{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: Sequence
                    • 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: SequenceDef
                  • OperatorDefinition{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: Assignment
                    • associativity: xfy
                    • precedence: 2000
                    • text: =
                    • syntax:
                      • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                        • name: first
                        • 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: second
                        • operator: =
                        • expression:
                          • OperandOp{http://etl.sf.net/etl/grammar/0.2.1}:
                            • position: right
                  • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: Help
                    • 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: help
                      • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                        • name: variable
                        • operator: =
                        • expression:
                          • RefOp{http://etl.sf.net/etl/grammar/0.2.1}:
                            • name: NameDef
                  • Statement{http://etl.sf.net/etl/grammar/0.2.1}:
                    • name: IncludeStatement
                    • 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: t
                                • name: IncludeStatement
                            • 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: include
                                  • Let{http://etl.sf.net/etl/grammar/0.2.1}:
                                    • name: systemId
                                    • operator: =
                                    • expression:
                                      • StringOp{http://etl.sf.net/etl/grammar/0.2.1}:
                                        • quote: '"'
               1: doctype public "-//IDN etl.sf.net//ETL//Grammar 0.2.1";
               2: grammar calculator.CalculatorVars {
               3:     include "calculator-arith-0_2_1.g.etl";
               4:     namespace t = "http://etl.sf.net/samples/calculator";
               5:     namespace m = "http://etl.sf.net/samples/calculator/meta";
               6:     namespace default v = "http://etl.sf.net/samples/calculator/vars";
               7:     context abstract MetaInformation {
               8:         def ExpressionDef {
               9:             expression(Expressions); 
              10:         };
              11:         def NameDef {
              12:             ^ v:Name { 
              13:                 {
              14:                     @ literal = identifier;
              15:                 } | {
              16:                     @ quoted = string(prefix=Q|q, quote="'");
              17:                 };
              18:             };
              19:         };
              20:         documentation Documentation {
              21:             @ documentation += doclines wrapper m:DocumentationLine.text;
              22:         };
              23:         attributes Annotations {
              24:             @ annotations += % @ {
              25:                 ^ m:Annotation {
              26:                     @ name = ref(NameDef);
              27:                     % ( {
              28:                         @ arguments += list , {ref(ExpressionDef);}?;
              29:                     } % ) ?;
              30:                 }; 
              31:             } *;
              32:         };
              33:     };
              34:     context default Expressions {
              35:         include MetaInformation;
              36:         def ExpressionDef {
              37:             expression;
              38:         };
              39:         statement VarStatement {
              40:             @ type = token(var) | token(let);
              41:             @ name = ref(NameDef);
              42:             % = {
              43:                 @ value = expression;
              44:             }?;
              45:         };
              46:         op composite Name(f) {
              47:             ref(NameDef);
              48:         };
              49:         def SequenceDef {
              50:             ^ t:Sequence {
              51:                 @ statements += block; 
              52:             };
              53:         };
              54:         op composite Sequence(f) {
              55:             ref(SequenceDef);
              56:         };
              57:         op Assignment(xfy, 2000, =) {
              58:             @ first = left;
              59:             @ second = right;
              60:         };
              61:         statement Help {
              62:             % help;
              63:             @ variable = ref(NameDef);
              64:         };
              65:         statement IncludeStatement {
              66:             ^ t:IncludeStatement {
              67:                 % include;
              68:                 @ systemId = string(quote='"');
              69:             };
              70:         };
              71:     };
              72: };