From 90923ba3eb164d1b53c592edce384c3545a3671e Mon Sep 17 00:00:00 2001 From: "Mike D. Lowis" Date: Wed, 14 Mar 2012 21:42:22 -0400 Subject: [PATCH] Added language specification document --- LANGUAGE.markdown | 101 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 LANGUAGE.markdown 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* + -- 2.52.0