added draft LaTeX grammar
[sbp.git] / tests / latex.g
diff --git a/tests/latex.g b/tests/latex.g
new file mode 100644 (file)
index 0000000..73bd7d3
--- /dev/null
@@ -0,0 +1,52 @@
+// draft grammar for [La]TeX
+// note that this is approximate; in reality TeX has no grammar
+
+Text            = ()
+                | Token
+                | Text:: `Text                  Token
+                | Text:: `Text (WS:: ws)        Token
+                | Text:: `Text (BlankLine:: br) Token
+
+Token           = Command
+                | Comment::     "%" ~[\n]* "\n"
+                | EscapedChar:: "\\" ~[a-zA-Z\\]
+                | Environment:: "\\begin{" EnvironmentName "}" Text "\\end{" EnvironmentName! "}"
+                | Word::        ~[\\\r\n\ %{}]++
+                | LineBreak::   "\\\\"
+                | "$"  (Math:: ~[$]+) "$"
+                | "$$" (Math:: ~[$]+) "$$"
+                | Verbatim
+                | Table
+             // | WiX
+
+Command::       = "\\" CommandName         ws              -> ~[{]
+                | "\\" CommandName OptArgs ws "{" Text "}"
+CommandName     = [A-Za-z0-9]++ &~ "begin" | "end"
+OptArgs::       = ws ("[" Arg "]") +/ ws
+                | ()
+
+Table           = "\\begin{tabular}"
+                  TableRow +/ (ws "\\\\" ws)
+                  "\\end{tabular}"
+TableRow        = TableCol +/ (ws "&" ws)
+TableCol        = Text &~ ... "\\\\" ...
+
+EnvironmentName = [A-Za-z0-9]++ &~ "verbatim" | "tabular"
+
+Verbatim        = "\\begin{verbatim}"
+                  (Verb:: ... &~ ... "\\end{verbatim}")
+                  "\\end{verbatim}"
+
+hws!            = [ \r]
+ws!             = (hws* "\n")? hws*                   -> ~[ \n\r]
+nl!             = [ \r]* "\n"  [ \r]*                 -> ~[ \n\r]
+br!             = [ \r]* "\n"  [ \r]*  "\n" [ \r\n]*  -> ~[ \n\r]
+
+// import wix.g as wix
+// WiX       = "\\begin{wix}\n"
+//             wix.Pars
+//             "\n\\end{verbatim}"
+
+
+
+