解析 – 是否有一个可用于8位嵌入式系统的flex/bison的替代品?

前端之家收集整理的这篇文章主要介绍了解析 – 是否有一个可用于8位嵌入式系统的flex/bison的替代品?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在使用avr-gcc工具链在C上的AVR微控制器上编写一个简单的BASIC语言的小解释器作为练习。但是,我想知道是否有任何开源工具,可以帮助我编写词法分析器和解析器。

如果我写这个在我的Linux机器上运行,我可以使用flex / bison。现在我限制自己到一个8位的平台,我必须手工做,或不是?

解决方法

我实现了一个解析器为简单的命令语言针对 ATmega328p.该芯片有32k ROM和只有2k RAM。 RAM绝对是更重要的限制 – 如果你没有绑定到一个特定的芯片,选择一个尽可能多的RAM尽可能。这将使你的生活更容易。

起初我考虑使用flex / bison。我决定反对这个选项有两个主要原因:

>默认情况下,Flex& Bison依赖于一些标准库函数(特别是对于I / O),它们不可用或者在avr-libc中不工作。我确定有支持解决方法,但这是一些额外的努力,你将需要考虑。
> AVR有一个Harvard Architecture.C不是为了解决这个问题,所以即使常量变量被加载到RAM默认情况下。您必须使用特殊的宏/功能来存储和访问flashEEPROM中的数据。 Bison创建一些相对较大的查找表,这些会很快吃掉你的RAM。除非我错了(这是可能的),你将不得不编辑输出源为了利用特殊的Flash& EEPROM接口。

拒绝Flex& Bison,我去寻找其他发电机工具。以下是我考虑的几个:

> LEMON
> Ragel
> re2c

你可能还想看看Wikipedia’s comparison

最后,我结束了手编码词法分析器和解析器。

对于解析我使用了递归下降解析器。我认为Ira Baxter已经做了足够的工作覆盖这个主题,并有大量的在线教程。

对于我的词法分析器,我为所有的终端写了正则表达式,绘制了等效的状态机,并将其实现为一个巨大的函数,使用goto的状态之间跳跃。这是单调乏味,但结果工作伟大。另外,goto是实现状态机的一个很好的工具 – 所有的状态都可以在相关代码旁边有清晰的标签,没有函数调用或状态变量开销,它的速度与你可以得到的一样快。 C真的没有一个更好的构造来构建静态状态机。

要考虑的事情:词法分析器实际上只是一个解析器的专业化。最大的区别是,正规语法通常足以用于词法分析,而大多数编程语言(大多数)具有上下文无关语法。所以,没有什么阻止你实现一个词法分析器作为递归下降解析器或使用解析器生成器写一个词法分析器。它通常不如使用更专门的工具那么方便。

原文链接:https://www.f2er.com/flex/174578.html

猜你在找的Flex相关文章