如果是玩具 Markdown 的话, html 基础+一门脚本语言+基本的正则表达式就可以了… 最初的 Markdown 就是一些 Perl 脚本 gsub 出来的.
如果是认真的 Markdown, 需要的知识就多一些了…
well-defined 语法: 很难… Markdown 语法很多地方都没有定义细致, 可以照着 http://commonmark.org 的 spec 做.
要快: 通常是在瓶颈里加点 C 优化.
支持 latex 公式不? 通过什么方式支持 latex 公式? 命令行? mathjax? 还是自己渲染?
支持实时渲染不? 例如 Gitbook 和 Atom 的 Markdown 预览, 在用户改几个字以后不需要更新整个文档而只更新一小部分, 用户体验就很流畅. 实时渲染嘛, 如果学过点文档视图结构的基础知识, 就很自然写得出来.
不过编译原理其实不需要多少, 会写一个最简单的递归下降语法解析器就能搞斜体里嵌入粗体再嵌下划线之类情况…
按本人造轮子的经验, 有点难的地方就是缩进语法了, 例如列表里再缩进就会变成二级列表, 三级列表… 块引用和代码块也是缩进块, 缩进的语法嵌套起来, 其语义还得思考一下.