From 927d78e976ddad33e4a568b311e5e4b71678be41 Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Sun, 12 Apr 2026 15:21:16 +0200 Subject: feat(grammar): base --- grammar.ebnf | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 grammar.ebnf (limited to 'grammar.ebnf') diff --git a/grammar.ebnf b/grammar.ebnf new file mode 100644 index 0000000..d0259a1 --- /dev/null +++ b/grammar.ebnf @@ -0,0 +1,27 @@ +(* general structure *) +blocks = [ block ], { strong-delimiter, block }; +delimiter = weak-delimiter | strong-delimiter; +weak-delimiter = "\n"; +strong-delimiter = "\n\n", { "\n" }; + +(* blocks *) +block = title | paragraph | quote | callout | code-block | math-block | image | footnotes; +title = ? #{1,6} ?, content; +paragraph = content, { weak-delimiter, content }; +quote = ">", content, { weak-delimiter, ">", content }, [ paragraph ]; +callout = ":::", [ ? [a-z]+ ? ], { delimiter, content }, weak-delimiter, ":::"; +code-block = "```", [ ? [a-z]+ ? ], { delimiter, content }, weak-delimiter, "```"; +math-block = "$$$", { delimiter, content }, weak-delimiter, "$$$"; +image = "![", [ content ], "](", content, ")", { weak-delimiter, content }; +list-unordored = "-", paragraph, { weak-delimiter, "-", paragraph }; +list-ordored = ".", paragraph, { weak-delimiter, ".", paragraph }; +footnotes = "<", content, ":", paragraph, { weak-delimiter, "<", content, ":", paragraph }; + +(* content of a block *) +content = ? [^\n]+ ? | bold | italic | code-inline | math-inline | link | ref; +bold = "*", content, "*"; +italic = "_", content, "_"; +code-inline = "`", content, "`"; +math-inline = "$", content, "$"; +link = "[", [ content ], "](", content, ")"; +ref = "<", content, ">"; -- cgit v1.2.3