Lin 描述符文件解析器

Lin Descriptor File parser

我正在尝试研究可能的解析器,作为开发可用于解析 Lin 描述符文件的 PC 应用程序的一部分。当前的解析器应用程序基于 flex-bison 解析方法。现在我需要重新设计解析器,因为当前的解析器无法检测特定错误。

我以前用过 Ragel parser(https://en.wikipedia.org/wiki/Ragel) for parsing a regular expression (Regex : https://en.wikipedia.org/wiki/Regular_expression) 命令,事实证明它非常方便。

但是,鉴于 LDF-file 当前的复杂性,我不确定 Ragel(使用 C++ 作为宿主语言)是否是解析 LDF-file 的最佳方法。这样做的原因是 LDF-file 有很多数据不是固定的或恒定的,而是因供应商而异。此外,LDF 字段必须保留对其他字段的引用以检测文件中的错误。 当解析结构固定时,Ragel 更适合(这是我在开发 Regex 解析器时发现的)

任何已经从事此类项目的人都可以提供一些提示,以select为 Lin 描述符文件提供合适的解析器。

Lin 描述符文件示例:http://microchipdeveloper.com/lin:protocol-app-ldf

如果您觉得 LALR(1) 解析器不足以解决您的解析问题,那么有限自动机不可能更好。 FA严格来说没那么强大。

但是在不太了解您要实施的检查的性质的情况下,我很确定适当的策略是将文件解析为一些简单的分层数据结构(即某种形式的树,通常称为解析文献中的 AST)使用 flex/bison 语法,然后遍历生成的数据结构以执行任何必要的语义检查。

尝试在解析时进行语义检查通常会导致过于复杂、分解不良且无法扩展的解决方案。这不是 bison 工具的问题,而是使用它的特定风格没有考虑到我们所了解的关注点分离的重要性。

重构您现有的语法,使其使用 "just a grammar"——也就是说,它只生成所需的语义表示——这可能比使用其他解析器生成器(这是在任何情况下都不太可能提供任何真正的优势)。

而且您绝对应该抵制放弃解析器生成器而转而支持模块化程度更低的解决方案的诱惑:您可能会成功构建一些东西,但结果很可能比您目前的更难维护和扩展有。