UNPKG

lovelang

Version:

🖤 LoveLang: A romantic wrapper language over TypeScript/TSX

31 lines (26 loc) • 1.28 kB
# LoveLang Syntax Specification ## Lexical Elements - **Keywords**: hi babe, remember, babe,, say, when babe thinks, if babe feels, then, else, whenever babe says, class, try, catch, stop thinking, render, component - **String**: `"…"` - **Number**: `0|[1-9][0-9]*` - **Identifier**: `[A-Za-z_][A-Za-z0-9_]*` - **Punctuation**: `= ; { } + - * / < > ,` ## Grammar (EBNF) <program> ::= { <statement> } EOF ; <statement> ::= <varDecl> | <constDecl> | <printStmt> | <loopStmt> | <ifStmt> | <funcDecl> | <classDecl> | <tryCatchStmt> | <jsxElement> | <exprStmt> ; <varDecl> ::= "hi babe" "--" "this is" <STRING> "=" <expr> ";" ; <constDecl> ::= "remember" <STRING> "=" <expr> ";" ; <printStmt> ::= "babe," "say" <expr> ";" ; <loopStmt> ::= "when babe thinks" <block> ; <ifStmt> ::= "if babe feels" <expr> "then" <block> [ "else" <block> ] ; <funcDecl> ::= "whenever babe says" <expr> <block> ; <classDecl> ::= "class" <STRING> <block> ; <tryCatchStmt> ::= "try" <block> "catch" <STRING> <block> ; <jsxElement> ::= <tagStart> { <statement> } <tagEnd> ; <exprStmt> ::= <expr> ";" ; <block> ::= "{" { <statement> } "}" ; <expr> ::= <STRING> | <NUMBER> | <IDENT> | <jsxElement> ; <tagStart> ::= <IDENT> [ "class" <STRING> ] ; <tagEnd> ::= `</${IDENT}>` ;