我正在尝试用 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/