c++ - 编写分词器,从哪里开始?

标签 c++ css tokenize

我正在尝试用 C++ 为 CSS 编写分词器,但我不知道如何编写分词器。我知道它应该是贪婪的,为每个标记读取尽可能多的输入,理论上我知道如何将其放入代码中。

我看过 Boost.Tokenizer,它看起来不错,但对我没有任何帮助。它确实是分词器的一个很好的包装器,但问题在于编写分词器,即 Boost 术语中的 TokenizerFunction。

我不知道如何编写这个分词器,是否有任何“巧妙”的方式来实现它,比如与 the syntax itself 非常相似的东西?

请注意,我不是在寻找解析器!我的应用程序不需要能够理解 CSS,只需将 CSS 文件读取为通用的内部标记化格式,处理一些内容并再次输出。

最佳答案

编写“正确”的词法分析器和/或解析器比您想象的要困难得多。当您开始处理奇怪的极端情况时,它会变得很难看。

我最好的建议是花一些时间学习一个合适的词法分析器/解析器系统。 CSS 应该是一种相当容易实现的语言,然后您将获得一个非常强大的工具,可用于各种 future 的元素。

我是一个 Old Fart®,我将 lex/yacc(或使用相同语法的东西)用于此类元素。我第一次学会使用它们是在 80 年代初期,现在我努力学习了很多很多次。

顺便说一句,如果您有任何接近语言 BNF 的东西,lex/yacc 会非常容易使用。

关于c++ - 编写分词器,从哪里开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5918512/

相关文章:

c++ - 如何从 C++ 设置 QML 属性

c++ - 链表析构函数与 Valgrind 一起执行,但不单独执行

html - 3 div 不会在水平行中对齐

c++ - 标记 SIC 汇编程序源代码

c++ - zip 中的无效压缩数据

c++ - boost asio 和套接字阵列

jquery - 如何在 Jquery 移动 header 中设置左对齐的自定义图标

css - 单击链接后菜单图标不打开菜单

php - 生成 PHP 代码(来自 Parser Tokens)

javascript - 搜索标记颜色