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

时间:2015-01-07 03:45:04

标签: c# parsing tokenize lex zpl

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

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

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

我的问题是:我需要学习什么来编写一个很好的<something>来解析ZPL文档并将其转换为我可以执行的命令? (通过'执行',我的意思是画画。)

这是解析器吗?一个词法分析者?标记生成器?翻译吗?是否有一些编译器设计理论的子集是这类项目成功的最有效途径? ......那叫什么?

2 个答案:

答案 0 :(得分:2)

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

如果没有条件,那么可能是通过从上到下阅读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的工作版本?)。祝你好运。

如果您不知道该怎么做,那么您需要提出另一个问题。如果您不得不询问解析/解释/执行的所有内容,那么您很可能无法完成此项目。

答案 1 :(得分:2)

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

斯科特·斯坦奇菲尔德ANTLR 3.x Tutorial对这个主题(和乐趣)有很好的介绍 - 即使你不使用ANTLR也值得观看。

然后你需要知道ZPL本身。

对于C#,已经有一些词法分析器和解析器生成器通常会有一些示例让您感到舒服 - 只需从IronyCoco/RGOLD,{{3}中选择},ANTLRLLLPG或我的Sprache