You are previewing The “Oslo” Modeling Language.
O'Reilly logo
The “Oslo” Modeling Language

Book Description

The “Oslo” Modeling Language (commonly referred to as "M") is a language for defining domain models and languages (the latter are often referred to as textual DSLs). "M" was created to allow developers to efficiently capture their intention in a form that is natural to author but also efficient to store and query using off-the-shelf database technology.

This book comes from the original creators of "M"--David Langworthy, Brad Lovering, and Don Box--and is the definitive reference to the language. If you are looking for a compact textual notation for writing down information or schematizing structured and unstructured data, this book is for you.

This book is the authoritative specification of the "M" language (draft) and describes the syntax and underlying model of the language. Highlights of this book include:

  •  An Introduction to domain modeling constructs

  •  An Introduction to constructs for building textual DSLs

  •  Complete syntax for the language

  •  Definition of the "M" type system and data model

  •  Glossary of terms

Table of Contents

  1. Copyright
  2. Preface
  3. Acknowledgments
  4. About the Authors
  5. I. “Oslo” Modeling Language Specification
    1. 1. Introduction to “M”
      1. 1.1. Values
        1. 1.1.1. Collections
        2. 1.1.2. Entities
      2. 1.2. Types
        1. 1.2.1. Collection Types
        2. 1.2.2. Nullable Types
        3. 1.2.3. Entity Types
        4. 1.2.4. Declaring Fields
        5. 1.2.5. Declaring Computed Values
        6. 1.2.6. Constraints on Entity Types
      3. 1.3. Queries
        1. 1.3.1. Filtering
        2. 1.3.2. Selection
      4. 1.4. Modules
    2. 2. Lexical Structure
      1. 2.1. Programs
      2. 2.2. Grammars
        1. 2.2.1. Grammar Notation
        2. 2.2.2. Lexical Grammar
        3. 2.2.3. Syntactic Grammar
      3. 2.3. Lexical Analysis
        1. 2.3.1. Line Terminators
        2. 2.3.2. Comments
        3. 2.3.3. Whitespace
      4. 2.4. Tokens
        1. 2.4.1. Identifiers
        2. 2.4.2. Keywords
        3. 2.4.3. Literals
          1. 2.4.3.1. Decimal Literals
          2. 2.4.3.2. Integer Literals
          3. 2.4.3.3. Scientific Literals
          4. 2.4.3.4. Date Literals
          5. 2.4.3.5. DateTime Literals
          6. 2.4.3.6. Time Literals
          7. 2.4.3.7. Character Literals
          8. 2.4.3.8. Text Literals
          9. 2.4.3.9. Logical Literals
          10. 2.4.3.10. Binary and Byte Literals
          11. 2.4.3.11. Null Literal
          12. 2.4.3.12. Guid Literals
        4. 2.4.4. Operators and Punctuators
      5. 2.5. Pre-processing Directives
        1. 2.5.1. Conditional Compilation Symbols
        2. 2.5.2. Pre-processing Expressions
        3. 2.5.3. Declaration Directives
        4. 2.5.4. Conditional Compilation Directives
    3. 3. Types
      1. 3.1. Type Declaration
      2. 3.2. This
      3. 3.3. Subtyping
      4. 3.4. Operators
      5. 3.5. Intrinsic Types
        1. 3.5.1. Any
        2. 3.5.2. General
        3. 3.5.3. Number
          1. 3.5.3.1. Operators
          2. 3.5.3.2. AutoNumber
        4. 3.5.4. Text
          1. 3.5.4.1. Members
          2. 3.5.4.2. Declaration
        5. 3.5.5. Character
        6. 3.5.6. Logical
        7. 3.5.7. Binary and Byte
        8. 3.5.8. Guid
        9. 3.5.9. Date
        10. 3.5.10. DateTime
        11. 3.5.11. Time
      6. 3.6. Entity
        1. 3.6.1. Declaration
        2. 3.6.2. Identity
        3. 3.6.3. Operators
        4. 3.6.4. Members
        5. 3.6.5. Indexer
        6. 3.6.6. Ascription
      7. 3.7. Collections
        1. 3.7.1. Declaration
        2. 3.7.2. Operators
        3. 3.7.3. Members
        4. 3.7.4. Indexers
          1. 3.7.4.1. Selectors
          2. 3.7.4.2. Projectors
        5. 3.7.5. Uniqueness
      8. 3.8. Null
    4. 4. Computed and Stored Values
      1. 4.1. Computed Value Declaration
        1. 4.1.1. Overloading
      2. 4.2. Fields
    5. 5. Expressions
      1. 5.1. Operators
        1. 5.1.1. Operator Precedence and Associativity
      2. 5.2. Member Access
        1. 5.2.1. Symbol Lookup
      3. 5.3. Initializers
        1. 5.3.1. Collection Initializer
        2. 5.3.2. Enumeration Initializer
        3. 5.3.3. Reference Initializer
        4. 5.3.4. Non-Local Initialization
      4. 5.4. Invocation Expression
      5. 5.5. Primary Expressions
        1. 5.5.1. Simple Names
        2. 5.5.2. Parenthesized Expressions
      6. 5.6. Context Variable
      7. 5.7. Unary Operators
      8. 5.8. Multiplicity
      9. 5.9. Arithmetic Operators
      10. 5.10. Shift Operators
      11. 5.11. Relational and Type-Testing Operators
      12. 5.12. Equality Operators
      13. 5.13. Logical Operators
      14. 5.14. Conditional Operators
        1. 5.14.1. Coalescing Operator
        2. 5.14.2. Conditional Operator
      15. 5.15. Query Expressions
      16. 5.16. Compact Query Expressions
        1. 5.16.1. Where Operator
        2. 5.16.2. Select Operator
      17. 5.17. Binary and Collection Operators
      18. 5.18. Expressions
    6. 6. Module
      1. 6.1. Compilation Unit
      2. 6.2. Module Declaration
      3. 6.3. Inter-Module Dependencies
      4. 6.4. Compilation Episode
      5. 6.5. Storage
  6. II. MGrammar Language Specification
    1. 7. Introduction to MGrammar Language
      1. 7.1. Language Basics
      2. 7.2. Character Processing
      3. 7.3. Output
      4. 7.4. Modularity
    2. 8. Lexical Structure
      1. 8.1. Programs
      2. 8.2. Grammars
        1. 8.2.1. Grammar Notation
        2. 8.2.2. Lexical Grammar
        3. 8.2.3. Syntactic Grammar
      3. 8.3. Lexical Analysis
        1. 8.3.1. Line Terminators
        2. 8.3.2. Comments
        3. 8.3.3. Whitespace
      4. 8.4. Tokens
        1. 8.4.1. Identifiers
        2. 8.4.2. Keywords
        3. 8.4.3. Literals
          1. 8.4.3.1. Decimal Literals
          2. 8.4.3.2. Integer Literals
          3. 8.4.3.3. Logical Literals
          4. 8.4.3.4. Text Literals
          5. 8.4.3.5. Null Literal
        4. 8.4.4. Operators and Punctuators
      5. 8.5. Pre-processing Directives
        1. 8.5.1. Conditional Compilation Symbols
        2. 8.5.2. Pre-processing Expressions
        3. 8.5.3. Declaration Directives
        4. 8.5.4. Conditional Compilation Directives
    3. 9. Text Pattern Expressions
      1. 9.1. Primary Expressions
        1. 9.1.1. Character Class
        2. 9.1.2. References
        3. 9.1.3. Repetition Operators
        4. 9.1.4. Inline Rules
        5. 9.1.5. Any
        6. 9.1.6. Error
      2. 9.2. Term Operators
    4. 10. Productions
      1. 10.1. Pattern Declaration
      2. 10.2. Term Declaration
      3. 10.3. Constructors
        1. 10.3.1. Constructor Operators
        2. 10.3.2. Default Constructor
      4. 10.4. Precedence
        1. 10.4.1. Production Precedence
        2. 10.4.2. Term Precedence
    5. 11. Rules
      1. 11.1. Token Rules
        1. 11.1.1. Final Modifier
        2. 11.1.2. Identifier Modifier
      2. 11.2. Syntax Rules
      3. 11.3. Interleave Rules
      4. 11.4. Inline Rules
      5. 11.5. Rule Parameters
    6. 12. Languages
      1. 12.1. Main Rule
      2. 12.2. Cross-Language Rule References
    7. 13. Modules
      1. 13.1. Compilation Unit
      2. 13.2. Module Declaration
      3. 13.3. Inter-Module Dependencies
    8. 14. Attributes
      1. 14.1. Case Sensitive
  7. Glossary