为 ZPL 编写词法分析器解释器需要学习什么?

What do I need to learn to write a lexer parser interpreter for ZPL?

对于那些还没有看到它的人,ZPL 是一种基于文本的标记语言,用于从专用打印机打印标签。 UPS 运输标签就是一个很好的例子。

标记语言非常原始。有模态命令可以设置一些状态值,但大部分语言都是采用 <command><parameters><data> 形式的单行代码。没有流量控制或嵌套。

我想编写一个渲染引擎来解释 ZPL 并渲染成图像。有几个项目已经沿着这条路开始,但这些项目还不够完整,无法用于商业用途。

我的问题是:我需要学习什么才能编写出色的 <something> 来解析 ZPL 文档并将其转换为我可以执行的命令? ('execute',我的意思是平局。)

这是解析器吗?词法分析器?分词器?口译员?是否有编译器设计理论的某些子集可以成为此类项目成功的最有效途径? ...那叫什么?

在你的情况下,它可能是一个翻译。

如果没有条件,则可能是通过从上到下阅读 ZPL 文档生成标记。

您需要的是一个解析器来分解 ZPL 命令。如果幸运的话,在你拆开一个之后,你需要执行的一切都可用,要么来自命令的参数,要么来自以前的 ZPL 模态命令。

所以:

loop
    parse ZPL fragment
    execute ZPL fragment
end loop

如果您想阅读有关构建简单解析器的内容,可以在此处阅读:Is there an alternative for flex/bison that is usable on 8-bit embedded systems?

很明显,在解析器识别构造的每个点,它都具有构造内容的所有信息,因此您已准备好执行它。

当然,您必须了解 ZPL 命令的含义,并拥有可用于执行它们的机器。不是每个人都知道如何将标记请求转换为图像更新。如果您知道如何做到这一点,那么您就会大费周章(为什么不直接获取 ZPL 的工作版本呢?)。祝你好运。

如果您不知道该怎么做,您需要再问一个问题。如果你必须询问所有 parsing/interpreting/executing 你不太可能完成这个项目。

您需要了解什么是正则表达式、管理词法分析器的单一规则(最长匹配获胜)以及解析器的工作原理。

Scott Stanchfield 对这个主题有很好的介绍(而且很有趣)ANTLR 3.x Tutorial——即使你不会使用 ANTLR 也值得一看。

然后你需要了解 ZPL 本身。

对于 C#,已经有一些词法分析器和解析器生成器,通常带有一些让您感到舒服的示例——只需从 Irony, Coco/R, GOLD, ANTLR, LLLPG, Sprache, or my NLT 中挑选即可。