\begin{frame}[fragile] \frametitle{Deep Dive into Parsing DSL Syntax} \begin{columns} \begin{column}{0.3\textwidth} \begin{itemize} \item Hand-rolled recursive-descent parser. \item Why not use LR parser generator? \end{itemize} \end{column} \begin{column}{0.55\textwidth} \begin{verbatim} component HelloWorld { model { name: String = "hello", } view { "Hello, " {name} "!" } } \end{verbatim} \end{column} \end{columns} \end{frame} \begin{frame}[fragile] \frametitle{Taking advantage of Rust syntax} \begin{columns} \begin{column}{0.4\textwidth} \begin{verbatim} // proc-macro library pub enum TokenTree { Group(Group), Ident(Ident), Punct(Punct), Literal(Literal), } \end{verbatim} \end{column} \begin{column}{0.4\textwidth} \begin{itemize} \item Get \texttt{\{\}}-bracketed groups for free. \item Easily tell identifiers from strings. \item Punctuation has flexible representation. \item Get literal parsing for free. \end{itemize} \end{column} \end{columns} \end{frame}