The Microsoft code name "M" Modeling Language Specification - Languages
November 2009
[This content is no longer valid. For the latest information on "M", "Quadrant", SQL Server Modeling Services, and the Repository, see the Model Citizen blog.]
[This documentation targets the Microsoft SQL Server Modeling CTP (November 2009) and is subject to change in future releases. Blank topics are included as placeholders.]
Sections:
1: Introduction to "M"
2: Lexical Structure
3: Text Pattern Expressions
4: Productions
5: Rules
6: Languages
7: Types
8: Computed and Stored Values
9: Expressions
10: Module
11: Attributes
12: Catalog
13: Standard Library
14: Glossary
6 Languages
A language is a named collection of rules for imposing structure on text.
syntax LanguageDeclaration
= Attributes? "language" Name LanguageBody;
syntax LanguageBody
= "{" RuleDeclarations? "}";
syntax RuleDeclarations
= RuleDeclaration
| RuleDeclarations RuleDeclaration;
The language that follows recognizes the single text value "Hello World":
module HelloWorld {
language HelloWorld {
syntax Main
= "Hello World";
}
}
6.1 Main Rule
A language may consist of any number of rules. The following language recognizes the single text value "Hello World":
module HelloWorld {
language HelloWorld {
syntax Main
= Hello Whitespace World;
token Hello
= "Hello";
token World
= "World";
token Whitespace
= " ";
}
}
The three rules Hello, World, and Whitespace recognize the three single text values "Hello", "World", and " " respectively. The rule Main combines these three rules in sequence. The difference between syntax and token rules is described in §5.1.
Main is the distinguished start rule for a language. A language recognizes a text value if and only if Main recognizes a value. Also, the output for Main is the output for the language.
6.2 Cross-language rule references
Rules are members of a language. A language can use rules defined in another language using member access notation. The HelloWorld language recognizes the single text value "Hello World" using rules defined in the Words language:
module HelloWorld {
language Words {
token Hello
= "Hello";
token World
= "World";
}
language HelloWorld {
syntax Main
= Words.Hello Whitespace Words.World;
token Whitespace =
= " ";
}
}
All rules defined within the same module are accessible in this way. Rules defined in other modules must be exported and imported as defined in §10.3.