创建标记语言,如markdown

时间:2016-08-26 00:35:26

标签: c yacc lex

我一直在寻找类似于Markdown的标记语言。我想知道从哪里开始这样的事情。我已经研究了一些关于创建语言的知识,最后我得到了关于词法分析器和AST的教程 - 最后,这些语言被传递给类似LLVM的东西。

据我所知,像C这样的语言是命令式语言,像Markdown这样的语言是声明性的。对于那些可能不会触及LLVM之类的东西,工具链到底是什么样的呢?

我已经看到了其他答案,例如如何在Python中对某种语言进行标记。但是,我怎么能在C中这样做呢?我希望有一些可以在任何地方使用的东西(例如集成到Ruby原生扩展中,或者在C#项目中)。

我似乎无法找到一个好的方向。有没有人有从哪里开始的经验/提示?我将在何时何地构建“二进制”(从源代码创建HTML?)

Markdown甚至使用词法分析器吗?从语法来看,它看起来很可能只是使用正则表达式。

道歉,如果这篇文章过于宽泛,但我找不到关于这个话题的非常多的信息(也许我只是在错误的地方寻找!)

1 个答案:

答案 0 :(得分:5)

你是对的,像Markdown这样的简单标记语言是声明性的。 存在非常简单的实现,不涉及任何词法分析器和AST。

例如,原始的Markdown实现是一个使用正则表达式的简单Perl脚本。它由John Gruber(Markdown的创建者)撰写,可在此处获取: http://daringfireball.net/projects/downloads/Markdown_1.0.1.zip

还有一个C实现,您可以查看,称为折扣,可在此处获得: http://www.pell.portland.or.us/~orc/Code/discount/

这两个工具都是完全开源的,并向您显示完全处理标记语言所需的内容。它们包括整个工具链,包括解析器。