lovelang
Version:
🖤 LoveLang: A romantic wrapper language over TypeScript/TSX
31 lines (26 loc) • 1.28 kB
Markdown
# 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}>` ;