【问题标题】:What do I need to learn to write a lexer parser interpreter for ZPL? [closed]为 ZPL 编写词法分析器解释器需要学习什么? [关闭]
【发布时间】:2015-01-07 03:45:03
【问题描述】:

ZPL 是一种基于文本的标记语言,用于从专用打印机打印标签。 UPS 运输标签就是一个很好的例子。

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

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

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

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

【问题讨论】:

  • 只是好奇,但你能分享一下你需要这个的原因吗?我经常使用 ZPL,虽然这将是一个有趣的工具,但我不知道我是否会需要它。这将是一个有趣的项目!谢谢!
  • 我们希望能够在 ZPL 中编写一次标记,然后使用该标记打印到任何介质:ZPL 打印机、激光打印机、屏幕图像。我见过一种产品承诺只写一次(在 C# 中)、导出任何内容、标记代码。但是,该库的 ZPL 输出非常冗长。这使得 ZPL 打印速度太慢而无法实用。
  • 我想我迟到了,我也只是发表意见,但在我看来,不需要任何花哨的工具,因为 ZPL 只是一个没有嵌套的线性命令序列所有命令都以“^”或“~”字符开头,因此只需基本的正则表达式甚至 string.split("") 就足够了......
  • 你好,我建议你看看这个项目,我认为它有一个非常高级的渲染。 github.com/BinaryKits/BinaryKits.Zpl

标签: c# parsing tokenize lex zpl


【解决方案1】:

在你的情况下,它可能是一个解释器。

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

如果您不知道该怎么做,您需要再问一个问题。如果你必须询问所有的解析/解释/执行,你不太可能完成这个项目。

【讨论】:

    【解决方案2】:

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

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

    然后您需要了解 ZPL 本身。

    对于 C#,已经有一些词法分析器和解析器生成器,通常带有一些让您感到舒适的示例 - 只需从 IronyCoco/RGOLDANTLRLLLPG、@987654327 中选择@,或我的NLT

    【讨论】:

    • 谢谢@greenoldman。正如你所推荐的,我已经看过其中的一些。很有趣。
    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 2012-03-15
    • 2010-12-21
    • 2011-04-01
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多