From: Mike D. Lowis Date: Thu, 15 Mar 2012 01:42:22 +0000 (-0400) Subject: Added language specification document X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=90923ba3eb164d1b53c592edce384c3545a3671e;p=archive%2Fdlang.git Added language specification document --- diff --git a/LANGUAGE.markdown b/LANGUAGE.markdown new file mode 100644 index 0000000..589d221 --- /dev/null +++ b/LANGUAGE.markdown @@ -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* +