]> git.mdlowis.com Git - archive/dlang.git/commitdiff
Added language specification document
authorMike D. Lowis <mike@mdlowis.com>
Thu, 15 Mar 2012 01:42:22 +0000 (21:42 -0400)
committerMike D. Lowis <mike@mdlowis.com>
Thu, 15 Mar 2012 01:42:22 +0000 (21:42 -0400)
LANGUAGE.markdown [new file with mode: 0644]

diff --git a/LANGUAGE.markdown b/LANGUAGE.markdown
new file mode 100644 (file)
index 0000000..589d221
--- /dev/null
@@ -0,0 +1,101 @@
+DLang 0.3 Language Specification
+==============================================
+
+Lanugage Overview
+----------------------------------------------
+
+Datatypes
+----------------------------------------------
+
+### Prototype Objects
+
+### Basic Types
+#### Numbers
+#### Characters
+#### Symbols
+
+### Collections
+#### Lists
+#### Vectors
+#### Maps
+#### Strings
+
+### Blocks
+
+Modules
+----------------------------------------------
+
+
+Macros
+----------------------------------------------
+
+### Defining Macros
+### Using Macros
+
+Builtin Functions
+----------------------------------------------
+
+Builtin Macros
+----------------------------------------------
+
+Formal Syntax and Semantics
+----------------------------------------------
+
+### DLang EBNF Grammar
+
+    Program    = Expression*
+
+    Expression = MacroDefinition
+               | AssignExpr
+
+    AssignExpr = LogicalExpr ':=' LogicalExpr
+               | LogicalExpr '=' LogicalExpr
+
+    LogicalExpr = CompExpr (('&&' | '||') CompExpr)*
+
+    CompExpr = AddSubExpr (('==' | '!=' | '<' | '>' | '<=' | '>=') AddSubExpr)*
+
+    AddSubExpr = MulDivExpr (('+' | '-') MulDivExpr)*
+
+    MulDivExpr = UnaryExpr (('*' | '/') UnaryExpr)*
+
+    UnaryExpr = '!' GroupExpr
+              | GroupExpr
+
+    GroupExpr = '(' LogicalExpr ')'
+              | '(' LogicalExpr ')' '(' ExpList ')'
+              | '(' LogicalExpr ')' '[' LogicalExpr ']'
+              | Literal
+              | Literal '(' ExpList ')'
+              | Literal '[' LogicalExpr ']'
+
+    MemberExpr = Literal '.' LogicalExpr
+
+    Literal = VectorLiteral
+            | ListLiteral
+            | FuncLiteral
+            | ID
+            | NUM
+            | CHAR
+            | STRING
+            | SYMBOL
+
+    MapLiteral = '{' (Literal ':' AssignExpr)* '}'
+
+    VectorLiteral = '[' ExpList ']'
+
+    ListLiteral = '(' ExpList ')'
+
+    FuncLiteral = '{' ExpBlock '}'
+                |  '{' '|' ExpList '|' ExpBlock '}'
+
+    MacroDefinition = '%' ID '[' MacroParamList ']'
+
+    MacroPatternList = MacroPattern (',' MacroPattern)*
+
+    MacroPattern = '(' ID+ ')' ':' LogicalExpr
+
+    ExpList = (GroupExpr (',' GroupExpr)*)?
+
+    ExpBlock = Expression*
+