我还没有进入计算机科学的形式语言领域,所以我的问题可能很愚蠢。我正在用 C++ 编写一个简单的 NMEA 解析器,我必须选择:
我的第一个想法是手动构建一个简单的有限状态机,但后来我想也许我可以用更少的工作,甚至更有效地做到这一点。我以前用过正则表达式,但我认为NMEA正则表达式很长,应该需要“很长时间”才能匹配它。
然后我想到了使用解析器生成器。我认为所有人都使用相同的方法:它们生成 FSA。但我不知道哪个更有效。您通常什么时候使用解析器生成器而不是正则表达式(我认为您可以在解析器生成器中编写正则表达式)?
请解释差异,我对理论和经验都感兴趣。