expressir 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/demo.rb +3 -1
- data/expressir.gemspec +1 -1
- data/lib/expressir/express.rb +0 -1
- data/lib/expressir/express_exp/generated/ExpressLexer.rb +235 -232
- data/lib/expressir/express_exp/generated/ExpressParser.rb +1461 -1435
- data/lib/expressir/express_exp/parser.rb +8 -3
- data/lib/expressir/express_exp/visitor.rb +167 -136
- data/lib/expressir/model.rb +91 -0
- data/lib/expressir/model/constant.rb +2 -0
- data/lib/expressir/model/derived.rb +4 -0
- data/lib/expressir/model/entity.rb +12 -0
- data/lib/expressir/model/enumeration_item.rb +13 -0
- data/lib/expressir/model/explicit.rb +4 -0
- data/lib/expressir/model/expressions/aggregate_initializer.rb +13 -0
- data/lib/expressir/model/expressions/query.rb +8 -0
- data/lib/expressir/model/function.rb +31 -0
- data/lib/expressir/model/inverse.rb +4 -0
- data/lib/expressir/model/literals/binary.rb +13 -0
- data/lib/expressir/model/literals/integer.rb +13 -0
- data/lib/expressir/model/literals/logical.rb +13 -0
- data/lib/expressir/model/literals/real.rb +13 -0
- data/lib/expressir/model/literals/string.rb +15 -0
- data/lib/expressir/model/local.rb +2 -0
- data/lib/expressir/model/parameter.rb +2 -0
- data/lib/expressir/model/procedure.rb +31 -0
- data/lib/expressir/model/repository.rb +6 -0
- data/lib/expressir/model/rule.rb +31 -0
- data/lib/expressir/model/schema.rb +10 -0
- data/lib/expressir/model/statements/alias.rb +8 -0
- data/lib/expressir/model/statements/case_action.rb +2 -2
- data/lib/expressir/model/statements/if.rb +2 -2
- data/lib/expressir/model/statements/repeat.rb +10 -2
- data/lib/expressir/model/subtype_constraint.rb +2 -0
- data/lib/expressir/model/type.rb +8 -0
- data/lib/expressir/model/types/aggregate.rb +2 -0
- data/lib/expressir/model/types/enumeration.rb +4 -4
- data/lib/expressir/model/types/generic.rb +2 -0
- data/lib/expressir/model/types/generic_entity.rb +2 -0
- data/lib/expressir/model/types/select.rb +4 -4
- data/lib/expressir/model/unique.rb +2 -0
- data/lib/expressir/model/where.rb +2 -0
- data/lib/expressir/version.rb +1 -1
- data/original/examples/syntax/remark.exp +127 -0
- data/original/examples/syntax/syntax.exp +15 -10
- data/spec/expressir/express_exp/remark_spec.rb +301 -0
- data/spec/expressir/express_exp/syntax_spec.rb +659 -307
- metadata +15 -6
- data/lib/expressir/model/expressions/unknown.rb +0 -8
    
        data/lib/expressir/model/rule.rb
    CHANGED
    
    | @@ -8,6 +8,7 @@ module Expressir | |
| 8 8 | 
             
                  attr_accessor :locals
         | 
| 9 9 | 
             
                  attr_accessor :where
         | 
| 10 10 | 
             
                  attr_accessor :statements
         | 
| 11 | 
            +
                  attr_accessor :remarks
         | 
| 11 12 |  | 
| 12 13 | 
             
                  def initialize(options = {})
         | 
| 13 14 | 
             
                    @id = options[:id]
         | 
| @@ -17,6 +18,36 @@ module Expressir | |
| 17 18 | 
             
                    @locals = options[:locals]
         | 
| 18 19 | 
             
                    @where = options[:where]
         | 
| 19 20 | 
             
                    @statements = options[:statements]
         | 
| 21 | 
            +
                    @remarks = options[:remarks]
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def types
         | 
| 25 | 
            +
                    @declarations.select{|x| x.instance_of? Expressir::Model::Type}
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  def entities
         | 
| 29 | 
            +
                    @declarations.select{|x| x.instance_of? Expressir::Model::Entity}
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  def subtype_constraints
         | 
| 33 | 
            +
                    @declarations.select{|x| x.instance_of? Expressir::Model::SubtypeConstraint}
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  def functions
         | 
| 37 | 
            +
                    @declarations.select{|x| x.instance_of? Expressir::Model::Function}
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  def procedures
         | 
| 41 | 
            +
                    @declarations.select{|x| x.instance_of? Expressir::Model::Procedure}
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  def scope_items
         | 
| 45 | 
            +
                    items = []
         | 
| 46 | 
            +
                    items.push(*@declarations) if @declarations
         | 
| 47 | 
            +
                    items.push(*@constants) if @constants
         | 
| 48 | 
            +
                    items.push(*@locals) if @locals
         | 
| 49 | 
            +
                    items.push(*@where) if @where
         | 
| 50 | 
            +
                    items
         | 
| 20 51 | 
             
                  end
         | 
| 21 52 | 
             
                end
         | 
| 22 53 | 
             
              end
         | 
| @@ -7,6 +7,7 @@ module Expressir | |
| 7 7 | 
             
                  attr_accessor :constants
         | 
| 8 8 | 
             
                  attr_accessor :declarations
         | 
| 9 9 | 
             
                  attr_accessor :rules
         | 
| 10 | 
            +
                  attr_accessor :remarks
         | 
| 10 11 |  | 
| 11 12 | 
             
                  def initialize(options = {})
         | 
| 12 13 | 
             
                    @id = options[:id]
         | 
| @@ -15,6 +16,7 @@ module Expressir | |
| 15 16 | 
             
                    @constants = options[:constants]
         | 
| 16 17 | 
             
                    @declarations = options[:declarations]
         | 
| 17 18 | 
             
                    @rules = options[:rules]
         | 
| 19 | 
            +
                    @remarks = options[:remarks]
         | 
| 18 20 | 
             
                  end
         | 
| 19 21 |  | 
| 20 22 | 
             
                  def types
         | 
| @@ -36,6 +38,14 @@ module Expressir | |
| 36 38 | 
             
                  def procedures
         | 
| 37 39 | 
             
                    @declarations.select{|x| x.instance_of? Expressir::Model::Procedure}
         | 
| 38 40 | 
             
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def scope_items
         | 
| 43 | 
            +
                    items = []
         | 
| 44 | 
            +
                    items.push(*@constants) if @constants
         | 
| 45 | 
            +
                    items.push(*@declarations) if @declarations
         | 
| 46 | 
            +
                    items.push(*@rules) if @rules
         | 
| 47 | 
            +
                    items
         | 
| 48 | 
            +
                  end
         | 
| 39 49 | 
             
                end
         | 
| 40 50 | 
             
              end
         | 
| 41 51 | 
             
            end
         | 
| @@ -5,11 +5,19 @@ module Expressir | |
| 5 5 | 
             
                    attr_accessor :id
         | 
| 6 6 | 
             
                    attr_accessor :expression
         | 
| 7 7 | 
             
                    attr_accessor :statements
         | 
| 8 | 
            +
                    attr_accessor :remarks
         | 
| 8 9 |  | 
| 9 10 | 
             
                    def initialize(options = {})
         | 
| 10 11 | 
             
                      @id = options[:id]
         | 
| 11 12 | 
             
                      @expression = options[:expression]
         | 
| 12 13 | 
             
                      @statements = options[:statements]
         | 
| 14 | 
            +
                      @remarks = options[:remarks]
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    def scope_items
         | 
| 18 | 
            +
                      items = []
         | 
| 19 | 
            +
                      items.push(self)
         | 
| 20 | 
            +
                      items
         | 
| 13 21 | 
             
                    end
         | 
| 14 22 | 
             
                  end
         | 
| 15 23 | 
             
                end
         | 
| @@ -2,11 +2,11 @@ module Expressir | |
| 2 2 | 
             
              module Model
         | 
| 3 3 | 
             
                module Statements
         | 
| 4 4 | 
             
                  class CaseAction
         | 
| 5 | 
            -
                    attr_accessor : | 
| 5 | 
            +
                    attr_accessor :expression
         | 
| 6 6 | 
             
                    attr_accessor :statement
         | 
| 7 7 |  | 
| 8 8 | 
             
                    def initialize(options = {})
         | 
| 9 | 
            -
                      @ | 
| 9 | 
            +
                      @expression = options[:expression]
         | 
| 10 10 | 
             
                      @statement = options[:statement]
         | 
| 11 11 | 
             
                    end
         | 
| 12 12 | 
             
                  end
         | 
| @@ -2,12 +2,12 @@ module Expressir | |
| 2 2 | 
             
              module Model
         | 
| 3 3 | 
             
                module Statements
         | 
| 4 4 | 
             
                  class If
         | 
| 5 | 
            -
                    attr_accessor : | 
| 5 | 
            +
                    attr_accessor :expression
         | 
| 6 6 | 
             
                    attr_accessor :statements
         | 
| 7 7 | 
             
                    attr_accessor :else_statements
         | 
| 8 8 |  | 
| 9 9 | 
             
                    def initialize(options = {})
         | 
| 10 | 
            -
                      @ | 
| 10 | 
            +
                      @expression = options[:expression]
         | 
| 11 11 | 
             
                      @statements = options[:statements]
         | 
| 12 12 | 
             
                      @else_statements = options[:else_statements]
         | 
| 13 13 | 
             
                    end
         | 
| @@ -2,22 +2,30 @@ module Expressir | |
| 2 2 | 
             
              module Model
         | 
| 3 3 | 
             
                module Statements
         | 
| 4 4 | 
             
                  class Repeat
         | 
| 5 | 
            -
                    attr_accessor : | 
| 5 | 
            +
                    attr_accessor :id
         | 
| 6 6 | 
             
                    attr_accessor :bound1
         | 
| 7 7 | 
             
                    attr_accessor :bound2
         | 
| 8 8 | 
             
                    attr_accessor :increment
         | 
| 9 9 | 
             
                    attr_accessor :while_expression
         | 
| 10 10 | 
             
                    attr_accessor :until_expression
         | 
| 11 11 | 
             
                    attr_accessor :statements
         | 
| 12 | 
            +
                    attr_accessor :remarks
         | 
| 12 13 |  | 
| 13 14 | 
             
                    def initialize(options = {})
         | 
| 14 | 
            -
                      @ | 
| 15 | 
            +
                      @id = options[:id]
         | 
| 15 16 | 
             
                      @bound1 = options[:bound1]
         | 
| 16 17 | 
             
                      @bound2 = options[:bound2]
         | 
| 17 18 | 
             
                      @increment = options[:increment]
         | 
| 18 19 | 
             
                      @while_expression = options[:while_expression]
         | 
| 19 20 | 
             
                      @until_expression = options[:until_expression]
         | 
| 20 21 | 
             
                      @statements = options[:statements]
         | 
| 22 | 
            +
                      @remarks = options[:remarks]
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    def scope_items
         | 
| 26 | 
            +
                      items = []
         | 
| 27 | 
            +
                      items.push(self)
         | 
| 28 | 
            +
                      items
         | 
| 21 29 | 
             
                    end
         | 
| 22 30 | 
             
                  end
         | 
| 23 31 | 
             
                end
         | 
| @@ -6,6 +6,7 @@ module Expressir | |
| 6 6 | 
             
                  attr_accessor :abstract_supertype
         | 
| 7 7 | 
             
                  attr_accessor :total_over
         | 
| 8 8 | 
             
                  attr_accessor :subtype_expression
         | 
| 9 | 
            +
                  attr_accessor :remarks
         | 
| 9 10 |  | 
| 10 11 | 
             
                  def initialize(options = {})
         | 
| 11 12 | 
             
                    @id = options[:id]
         | 
| @@ -13,6 +14,7 @@ module Expressir | |
| 13 14 | 
             
                    @abstract_supertype = options[:abstract_supertype]
         | 
| 14 15 | 
             
                    @total_over = options[:total_over]
         | 
| 15 16 | 
             
                    @subtype_expression = options[:subtype_expression]
         | 
| 17 | 
            +
                    @remarks = options[:remarks]
         | 
| 16 18 | 
             
                  end
         | 
| 17 19 | 
             
                end
         | 
| 18 20 | 
             
              end
         | 
    
        data/lib/expressir/model/type.rb
    CHANGED
    
    | @@ -4,11 +4,19 @@ module Expressir | |
| 4 4 | 
             
                  attr_accessor :id
         | 
| 5 5 | 
             
                  attr_accessor :type
         | 
| 6 6 | 
             
                  attr_accessor :where
         | 
| 7 | 
            +
                  attr_accessor :remarks
         | 
| 7 8 |  | 
| 8 9 | 
             
                  def initialize(options = {})
         | 
| 9 10 | 
             
                    @id = options[:id]
         | 
| 10 11 | 
             
                    @type = options[:type]
         | 
| 11 12 | 
             
                    @where = options[:where]
         | 
| 13 | 
            +
                    @remarks = options[:remarks]
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def scope_items
         | 
| 17 | 
            +
                    items = []
         | 
| 18 | 
            +
                    items.push(*@where) if @where
         | 
| 19 | 
            +
                    items
         | 
| 12 20 | 
             
                  end
         | 
| 13 21 | 
             
                end
         | 
| 14 22 | 
             
              end
         | 
| @@ -4,10 +4,12 @@ module Expressir | |
| 4 4 | 
             
                  class Aggregate
         | 
| 5 5 | 
             
                    attr_accessor :label
         | 
| 6 6 | 
             
                    attr_accessor :base_type
         | 
| 7 | 
            +
                    attr_accessor :remarks
         | 
| 7 8 |  | 
| 8 9 | 
             
                    def initialize(options = {})
         | 
| 9 10 | 
             
                      @label = options[:label]
         | 
| 10 11 | 
             
                      @base_type = options[:base_type]
         | 
| 12 | 
            +
                      @remarks = options[:remarks]
         | 
| 11 13 | 
             
                    end
         | 
| 12 14 | 
             
                  end
         | 
| 13 15 | 
             
                end
         | 
| @@ -3,15 +3,15 @@ module Expressir | |
| 3 3 | 
             
                module Types
         | 
| 4 4 | 
             
                  class Enumeration
         | 
| 5 5 | 
             
                    attr_accessor :extensible
         | 
| 6 | 
            -
                    attr_accessor : | 
| 6 | 
            +
                    attr_accessor :items
         | 
| 7 7 | 
             
                    attr_accessor :extension_type
         | 
| 8 | 
            -
                    attr_accessor : | 
| 8 | 
            +
                    attr_accessor :extension_items
         | 
| 9 9 |  | 
| 10 10 | 
             
                    def initialize(options = {})
         | 
| 11 11 | 
             
                      @extensible = options[:extensible]
         | 
| 12 | 
            -
                      @ | 
| 12 | 
            +
                      @items = options[:items]
         | 
| 13 13 | 
             
                      @extension_type = options[:extension_type]
         | 
| 14 | 
            -
                      @ | 
| 14 | 
            +
                      @extension_items = options[:extension_items]
         | 
| 15 15 | 
             
                    end
         | 
| 16 16 | 
             
                  end
         | 
| 17 17 | 
             
                end
         | 
| @@ -4,16 +4,16 @@ module Expressir | |
| 4 4 | 
             
                  class Select
         | 
| 5 5 | 
             
                    attr_accessor :extensible
         | 
| 6 6 | 
             
                    attr_accessor :generic_entity
         | 
| 7 | 
            -
                    attr_accessor : | 
| 7 | 
            +
                    attr_accessor :items
         | 
| 8 8 | 
             
                    attr_accessor :extension_type
         | 
| 9 | 
            -
                    attr_accessor : | 
| 9 | 
            +
                    attr_accessor :extension_items
         | 
| 10 10 |  | 
| 11 11 | 
             
                    def initialize(options = {})
         | 
| 12 12 | 
             
                      @extensible = options[:extensible]
         | 
| 13 13 | 
             
                      @generic_entity = options[:generic_entity]
         | 
| 14 | 
            -
                      @ | 
| 14 | 
            +
                      @items = options[:items]
         | 
| 15 15 | 
             
                      @extension_type = options[:extension_type]
         | 
| 16 | 
            -
                      @ | 
| 16 | 
            +
                      @extension_items = options[:extension_items]
         | 
| 17 17 | 
             
                    end
         | 
| 18 18 | 
             
                  end
         | 
| 19 19 | 
             
                end
         | 
    
        data/lib/expressir/version.rb
    CHANGED
    
    
| @@ -0,0 +1,127 @@ | |
| 1 | 
            +
            --"remarkSchema" universal scope - schema before
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            SCHEMA remarkSchema;
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            CONSTANT remarkConstant : STRING := 'xxx'; END_CONSTANT;
         | 
| 6 | 
            +
            TYPE remarkType = STRING; END_TYPE;
         | 
| 7 | 
            +
            ENTITY remarkEntity;
         | 
| 8 | 
            +
              remarkExplicit : STRING;
         | 
| 9 | 
            +
              DERIVE remarkDerived : STRING := 'xxx';
         | 
| 10 | 
            +
              INVERSE remarkInverse : remarkEntity FOR remarkExplicit;
         | 
| 11 | 
            +
              UNIQUE remarkUnique : remarkExplicit;
         | 
| 12 | 
            +
              WHERE remarkWhere : TRUE;
         | 
| 13 | 
            +
              --"remarkExplicit" entity scope - entity explicit
         | 
| 14 | 
            +
              --"remarkDerived" entity scope - entity derived
         | 
| 15 | 
            +
              --"remarkInverse" entity scope - entity inverse
         | 
| 16 | 
            +
              --"remarkUnique" entity scope - entity unique
         | 
| 17 | 
            +
              --"remarkWhere" entity scope - entity where
         | 
| 18 | 
            +
            END_ENTITY;
         | 
| 19 | 
            +
            SUBTYPE_CONSTRAINT remarkSubtypeConstraint FOR remarkEntity; END_SUBTYPE_CONSTRAINT;
         | 
| 20 | 
            +
            FUNCTION remarkFunction (remarkParameter : STRING) : BOOLEAN;
         | 
| 21 | 
            +
              TYPE remarkType = STRING; END_TYPE;
         | 
| 22 | 
            +
              CONSTANT remarkConstant : STRING := 'xxx'; END_CONSTANT;
         | 
| 23 | 
            +
              LOCAL remarkLocal : STRING; END_LOCAL;
         | 
| 24 | 
            +
              ALIAS remarkAlias FOR remarkLocal; ;
         | 
| 25 | 
            +
                --"remarkAlias" function alias scope - function alias
         | 
| 26 | 
            +
              END_ALIAS;
         | 
| 27 | 
            +
              REPEAT remarkRepeat := 1 TO 9; ;
         | 
| 28 | 
            +
                --"remarkRepeat" function repeat scope - function repeat
         | 
| 29 | 
            +
              END_REPEAT;
         | 
| 30 | 
            +
              remarkLocal := QUERY(remarkQuery <* remarkLocal | TRUE
         | 
| 31 | 
            +
                --"remarkQuery" function query scope - function query
         | 
| 32 | 
            +
              );
         | 
| 33 | 
            +
              --"remarkParameter" function scope - function parameter
         | 
| 34 | 
            +
              --"remarkType" function scope - function type
         | 
| 35 | 
            +
              --"remarkConstant" function scope - function constant
         | 
| 36 | 
            +
              --"remarkLocal" function scope - function local
         | 
| 37 | 
            +
            END_FUNCTION;
         | 
| 38 | 
            +
            PROCEDURE remarkProcedure (remarkParameter : STRING);
         | 
| 39 | 
            +
              TYPE remarkType = STRING; END_TYPE;
         | 
| 40 | 
            +
              CONSTANT remarkConstant : STRING := 'xxx'; END_CONSTANT;
         | 
| 41 | 
            +
              LOCAL remarkLocal : STRING; END_LOCAL;
         | 
| 42 | 
            +
              ALIAS remarkAlias FOR remarkLocal; ;
         | 
| 43 | 
            +
                --"remarkAlias" procedure alias scope - procedure alias
         | 
| 44 | 
            +
              END_ALIAS;
         | 
| 45 | 
            +
              REPEAT remarkRepeat := 1 TO 9; ;
         | 
| 46 | 
            +
                --"remarkRepeat" procedure repeat scope - procedure repeat
         | 
| 47 | 
            +
              END_REPEAT;
         | 
| 48 | 
            +
              remarkLocal := QUERY(remarkQuery <* remarkLocal | TRUE
         | 
| 49 | 
            +
                --"remarkQuery" procedure query scope - procedure query
         | 
| 50 | 
            +
              );
         | 
| 51 | 
            +
              --"remarkParameter" procedure scope - procedure parameter
         | 
| 52 | 
            +
              --"remarkType" procedure scope - procedure type
         | 
| 53 | 
            +
              --"remarkConstant" procedure scope - procedure constant
         | 
| 54 | 
            +
              --"remarkLocal" procedure scope - procedure local
         | 
| 55 | 
            +
            END_PROCEDURE;
         | 
| 56 | 
            +
            RULE remarkRule FOR (remarkEntity);
         | 
| 57 | 
            +
              TYPE remarkType = STRING; END_TYPE;
         | 
| 58 | 
            +
              CONSTANT remarkConstant : STRING := 'xxx'; END_CONSTANT;
         | 
| 59 | 
            +
              LOCAL remarkLocal : STRING; END_LOCAL;
         | 
| 60 | 
            +
              ALIAS remarkAlias FOR remarkLocal; ;
         | 
| 61 | 
            +
                --"remarkAlias" rule alias scope - rule alias
         | 
| 62 | 
            +
              END_ALIAS;
         | 
| 63 | 
            +
              REPEAT remarkRepeat := 1 TO 9; ;
         | 
| 64 | 
            +
                --"remarkRepeat" rule repeat scope - rule repeat
         | 
| 65 | 
            +
              END_REPEAT;
         | 
| 66 | 
            +
              remarkLocal := QUERY(remarkQuery <* remarkLocal | TRUE
         | 
| 67 | 
            +
                --"remarkQuery" rule query scope - rule query
         | 
| 68 | 
            +
              );
         | 
| 69 | 
            +
              WHERE remarkWhere : TRUE;
         | 
| 70 | 
            +
              --"remarkType" rule scope - rule type
         | 
| 71 | 
            +
              --"remarkConstant" rule scope - rule constant
         | 
| 72 | 
            +
              --"remarkLocal" rule scope - rule local
         | 
| 73 | 
            +
              --"remarkWhere" rule scope - rule where
         | 
| 74 | 
            +
            END_RULE;
         | 
| 75 | 
            +
             | 
| 76 | 
            +
            --"remarkConstant" schema scope - constant
         | 
| 77 | 
            +
            --"remarkType" schema scope - type
         | 
| 78 | 
            +
            --"remarkEntity" schema scope - entity
         | 
| 79 | 
            +
            --"remarkEntity.remarkExplicit" schema scope - entity explicit
         | 
| 80 | 
            +
            --"remarkEntity.remarkDerived" schema scope - entity derived
         | 
| 81 | 
            +
            --"remarkEntity.remarkInverse" schema scope - entity inverse
         | 
| 82 | 
            +
            --"remarkEntity.remarkUnique" schema scope - entity unique
         | 
| 83 | 
            +
            --"remarkEntity.remarkWhere" schema scope - entity where
         | 
| 84 | 
            +
            --"remarkSubtypeConstraint" schema scope - subtype constraint
         | 
| 85 | 
            +
            --"remarkFunction" schema scope - function
         | 
| 86 | 
            +
            --"remarkFunction.remarkParameter" schema scope - function parameter
         | 
| 87 | 
            +
            --"remarkFunction.remarkType" schema scope - function type
         | 
| 88 | 
            +
            --"remarkFunction.remarkConstant" schema scope - function constant
         | 
| 89 | 
            +
            --"remarkFunction.remarkLocal" schema scope - function local
         | 
| 90 | 
            +
            --"remarkProcedure" schema scope - procedure
         | 
| 91 | 
            +
            --"remarkProcedure.remarkParameter" schema scope - procedure parameter
         | 
| 92 | 
            +
            --"remarkProcedure.remarkType" schema scope - procedure type
         | 
| 93 | 
            +
            --"remarkProcedure.remarkConstant" schema scope - procedure constant
         | 
| 94 | 
            +
            --"remarkProcedure.remarkLocal" schema scope - procedure local
         | 
| 95 | 
            +
            --"remarkRule" schema scope - rule
         | 
| 96 | 
            +
            --"remarkRule.remarkType" schema scope - rule type
         | 
| 97 | 
            +
            --"remarkRule.remarkConstant" schema scope - rule constant
         | 
| 98 | 
            +
            --"remarkRule.remarkLocal" schema scope - rule local
         | 
| 99 | 
            +
            --"remarkRule.remarkWhere" schema scope - rule where
         | 
| 100 | 
            +
             | 
| 101 | 
            +
            END_SCHEMA;
         | 
| 102 | 
            +
             | 
| 103 | 
            +
            --"remarkSchema" universal scope - schema
         | 
| 104 | 
            +
            --"remarkSchema.remarkConstant" universal scope - constant
         | 
| 105 | 
            +
            --"remarkSchema.remarkType" universal scope - type
         | 
| 106 | 
            +
            --"remarkSchema.remarkEntity" universal scope - entity
         | 
| 107 | 
            +
            --"remarkSchema.remarkEntity.remarkExplicit" universal scope - entity explicit
         | 
| 108 | 
            +
            --"remarkSchema.remarkEntity.remarkDerived" universal scope - entity derived
         | 
| 109 | 
            +
            --"remarkSchema.remarkEntity.remarkInverse" universal scope - entity inverse
         | 
| 110 | 
            +
            --"remarkSchema.remarkEntity.remarkUnique" universal scope - entity unique
         | 
| 111 | 
            +
            --"remarkSchema.remarkEntity.remarkWhere" universal scope - entity where
         | 
| 112 | 
            +
            --"remarkSchema.remarkSubtypeConstraint" universal scope - subtype constraint
         | 
| 113 | 
            +
            --"remarkSchema.remarkFunction" universal scope - function
         | 
| 114 | 
            +
            --"remarkSchema.remarkFunction.remarkParameter" universal scope - function parameter
         | 
| 115 | 
            +
            --"remarkSchema.remarkFunction.remarkType" universal scope - function type
         | 
| 116 | 
            +
            --"remarkSchema.remarkFunction.remarkConstant" universal scope - function constant
         | 
| 117 | 
            +
            --"remarkSchema.remarkFunction.remarkLocal" universal scope - function local
         | 
| 118 | 
            +
            --"remarkSchema.remarkProcedure" universal scope - procedure
         | 
| 119 | 
            +
            --"remarkSchema.remarkProcedure.remarkParameter" universal scope - procedure parameter
         | 
| 120 | 
            +
            --"remarkSchema.remarkProcedure.remarkType" universal scope - procedure type
         | 
| 121 | 
            +
            --"remarkSchema.remarkProcedure.remarkConstant" universal scope - procedure constant
         | 
| 122 | 
            +
            --"remarkSchema.remarkProcedure.remarkLocal" universal scope - procedure local
         | 
| 123 | 
            +
            --"remarkSchema.remarkRule" universal scope - rule
         | 
| 124 | 
            +
            --"remarkSchema.remarkRule.remarkType" universal scope - rule type
         | 
| 125 | 
            +
            --"remarkSchema.remarkRule.remarkConstant" universal scope - rule constant
         | 
| 126 | 
            +
            --"remarkSchema.remarkRule.remarkLocal" universal scope - rule local
         | 
| 127 | 
            +
            --"remarkSchema.remarkRule.remarkWhere" universal scope - rule where
         | 
| @@ -12,12 +12,12 @@ CONSTANT | |
| 12 12 | 
             
              -- literals
         | 
| 13 13 | 
             
              binaryExpression : STRING := %011110000111100001111000;
         | 
| 14 14 | 
             
              integerExpression : STRING := 999;
         | 
| 15 | 
            -
               | 
| 16 | 
            -
               | 
| 17 | 
            -
               | 
| 15 | 
            +
              trueLogicalExpression : STRING := TRUE;
         | 
| 16 | 
            +
              falseLogicalExpression : STRING := FALSE;
         | 
| 17 | 
            +
              unknownLogicalExpression : STRING := UNKNOWN;
         | 
| 18 18 | 
             
              realExpression : STRING := 999.999;
         | 
| 19 | 
            -
               | 
| 20 | 
            -
               | 
| 19 | 
            +
              simpleStringExpression : STRING := 'xxx';
         | 
| 20 | 
            +
              encodedStringExpression : STRING := "000000780000007800000078";
         | 
| 21 21 |  | 
| 22 22 | 
             
              -- constants
         | 
| 23 23 | 
             
              constEExpression : STRING := CONST_E;
         | 
| @@ -93,10 +93,10 @@ CONSTANT | |
| 93 93 | 
             
              likeExpression : STRING := 'xxx' LIKE 'xxx';
         | 
| 94 94 |  | 
| 95 95 | 
             
              -- aggregate initializers
         | 
| 96 | 
            -
               | 
| 97 | 
            -
               | 
| 98 | 
            -
               | 
| 99 | 
            -
               | 
| 96 | 
            +
              aggregateInitializerExpression : STRING := ['xxx'];
         | 
| 97 | 
            +
              repeatedAggregateInitializerExpression : STRING := ['xxx' : 2];
         | 
| 98 | 
            +
              complexAggregateInitializerExpression : STRING := [4 + 2];
         | 
| 99 | 
            +
              complexRepeatedAggregateInitializerExpression : STRING := [4 + 2 : 4 + 2];
         | 
| 100 100 |  | 
| 101 101 | 
             
              -- entity constructors
         | 
| 102 102 | 
             
              entityConstructorExpression : STRING := explicitAttributeEntity(TRUE);
         | 
| @@ -175,14 +175,19 @@ ENTITY explicitAttributeEntity; test : BOOLEAN; END_ENTITY; | |
| 175 175 | 
             
            ENTITY explicitAttributeOptionalEntity; test : OPTIONAL BOOLEAN; END_ENTITY;
         | 
| 176 176 | 
             
            ENTITY explicitAttributeMultipleEntity; test : BOOLEAN; test2 : BOOLEAN; END_ENTITY;
         | 
| 177 177 | 
             
            ENTITY explicitAttributeMultipleShorthandEntity; test, test2 : BOOLEAN; END_ENTITY;
         | 
| 178 | 
            -
            ENTITY  | 
| 178 | 
            +
            ENTITY explicitAttributeRedeclaredEntity; SELF\explicitAttributeEntity.test: BOOLEAN; END_ENTITY;
         | 
| 179 | 
            +
            ENTITY explicitAttributeRedeclaredRenamedEntity; SELF\explicitAttributeEntity.test RENAMED test2: BOOLEAN; END_ENTITY;
         | 
| 179 180 | 
             
            ENTITY derivedAttributeEntity; DERIVE test : BOOLEAN := TRUE; END_ENTITY;
         | 
| 181 | 
            +
            ENTITY derivedAttributeRedeclaredEntity; DERIVE SELF\explicitAttributeEntity.test : BOOLEAN := TRUE; END_ENTITY;
         | 
| 182 | 
            +
            ENTITY derivedAttributeRedeclaredRenamedEntity; DERIVE SELF\explicitAttributeEntity.test RENAMED test2 : BOOLEAN := TRUE; END_ENTITY;
         | 
| 180 183 | 
             
            ENTITY inverseAttributeEntity; INVERSE test : explicitAttributeEntity FOR test; END_ENTITY;
         | 
| 181 184 | 
             
            ENTITY inverseAttributeEntityEntity; INVERSE test : explicitAttributeEntity FOR explicitAttributeEntity.test; END_ENTITY;
         | 
| 182 185 | 
             
            ENTITY inverseAttributeSetEntity; INVERSE test : SET OF explicitAttributeEntity FOR test; END_ENTITY;
         | 
| 183 186 | 
             
            ENTITY inverseAttributeSetBoundEntity; INVERSE test : SET [1:9] OF explicitAttributeEntity FOR test; END_ENTITY;
         | 
| 184 187 | 
             
            ENTITY inverseAttributeBagEntity; INVERSE test : BAG OF explicitAttributeEntity FOR test; END_ENTITY;
         | 
| 185 188 | 
             
            ENTITY inverseAttributeBagBoundEntity; INVERSE test : BAG [1:9] OF explicitAttributeEntity FOR test; END_ENTITY;
         | 
| 189 | 
            +
            ENTITY inverseAttributeRedeclaredEntity; INVERSE SELF\explicitAttributeEntity.test : explicitAttributeEntity FOR test; END_ENTITY;
         | 
| 190 | 
            +
            ENTITY inverseAttributeRedeclaredRenamedEntity; INVERSE SELF\explicitAttributeEntity.test RENAMED test2 : explicitAttributeEntity FOR test; END_ENTITY;
         | 
| 186 191 | 
             
            ENTITY uniqueEntity; UNIQUE test; END_ENTITY;
         | 
| 187 192 | 
             
            ENTITY uniqueLabelEntity; UNIQUE UR1: test; END_ENTITY;
         | 
| 188 193 | 
             
            ENTITY uniqueQualifiedEntity; UNIQUE SELF\explicitAttributeEntity.test; END_ENTITY;
         |