我需要学习什么才能为 ZPL 编写词法分析器解释器
本文关键字:ZPL 词法分析器 解释器 学习 什么 | 更新日期: 2023-09-27 18:36:27
对于那些没有看过它的人来说,ZPL是一种基于文本的标记语言,用于从专用打印机打印标签。UPS 运输标签就是一个很好的例子。
标记语言非常原始。 有模态命令来设置一些状态值,但大部分语言是采用 <command><parameters><data>
形式的单行。 没有流量控制或嵌套。
我想编写一个渲染引擎来解释 ZPL 并渲染为图像。 有几个项目已经开始走这条路,但这些项目还不够完整,无法用于商业用途。
我的问题是:我需要学习什么来编写一个伟大的<something>
来解析 ZPL 文档并将其转换为我可以执行的命令? (我所说的"执行"是指平局。
这是一个解析器吗?词法分析器?分词器?口译员? 编译器设计理论的某个子集是否是此类项目最有效的成功途径?...这叫什么?
在您的情况下,它可能是口译员。
如果没有条件,那么大概标记是通过从上到下阅读 ZPL 文档来生成的。
你需要的是一个解析器来拆解ZPL命令。 如果你幸运地拆开一个,你需要执行的所有东西都可以从命令的参数或以前的 ZPL 模态命令中获得。
所以:
loop
parse ZPL fragment
execute ZPL fragment
end loop
如果你想阅读有关构建简单解析器的信息,你可以在这里做:是否有一种可以在 8 位嵌入式系统上使用的 flex/bison 替代方案?
很明显,在解析识别构造的每个点,它都有来自构造内容的所有信息,因此您已准备好执行它。
当然,您必须知道ZPL命令的含义,并拥有可用的机器来执行它们。 没有人知道如何将标记请求转换为图像上的更新。 如果你知道如何做到这一点,你面前就会流很多汗水(你为什么不去买一个工作版本的ZPL?)。 祝你好运。
如果您不知道该怎么做,则需要问另一个问题。 如果你必须询问所有的解析/解释/执行,你不太可能完成这个项目。
您需要了解什么是正则表达式、控制词法分析器的单一规则(最长匹配获胜)以及解析器的工作原理。
Scott Stanchfield ANTLR 3.x教程对这个主题有很好的介绍(和乐趣) - 即使你不会使用ANTLR,也值得一看。
然后你需要知道ZPL本身。
对于C#,已经有一些词法分析和解析器生成器,通常有一些示例让你感到舒适 - 只需从Irony,Coco/R,GOLD,ANTLR,LLLPG,Sprache或My NLT中选择。