我正在尝试用C ++编写CSS的tokenizer,但我不知道如何编写一个tokenizer。我知道它应该是贪婪的,为每个令牌读取尽可能多的输入,理论上我知道如何将它放在代码中。
我看过Boost.Tokenizer,看起来很不错,但它对我没有任何帮助。它肯定是一个很好的包装器包装器,但问题在于使用Boost术语编写令牌分离器,TokenizerFunction。
我不知道如何编写这个标记化器,是否有任何“整洁”的方法,比如the syntax itself非常类似的东西?
请注意,我不是在寻找解析器!我的应用程序不需要能够理解CSS,只需将CSS文件读取为一般内部标记化格式,处理一些内容并再次输出。
答案 0 :(得分:4)
编写一个“正确的”词法分析器和/或解析器比你想象的要困难得多。当你开始处理奇怪的角落案件时,它会变得丑陋。
我最好的建议是花些时间学习一个合适的词法分析器/解析器系统。 CSS应该是一种相当容易实现的语言,然后你将获得一个非常强大的工具,可以用于各种未来的项目。
我是OldFart®,我使用lex / yacc(或使用相同语法的东西)进行此类项目。我第一次学会在80年代早期使用它们,并且已经多次重复学习它们。
顺便说一句,如果你有接近该语言的BNF的任何内容,lex / yacc可以很容易使用。答案 1 :(得分:0)