编译器中的Yacc和Lex,“和”?

问题描述 投票:0回答:1

为什么 yacc 和 lex 是分开的?

我的意思是为什么 C 程序员不把它们设计在一起?

例如,我们可以一起制作lex-yacc工具吗?

flexbox bison yacc lex
1个回答
0
投票

将它们分开是因为它们在单独使用时也很有用。他们的维护者不想通过将其合并到一个工具中来限制他们。

例如,我曾经使用 Lex 编写过一个对字符串进行非转义的函数。它不处理任何类型的结构化数据,也不需要解析器来配合它。

对于Yacc来说,它并不真正需要Lex。它可以采用任何返回

int
的函数。 在某些语言中,很容易找到标记,并且您不需要 Lex 创建的整个复杂状态机。 或者您可能想首先解析一些不是文本的数据源。 (例如,令牌是通过某种算法生成的。)

另一个原因是这两个程序是由不同的作者在不同的时间独立开发的。 我认为 Lex 的语法是基于 Yacc 的,当时 Yacc 已经或多或少地完成了。 后来它们一起使用成为了一个既定的行业标准,并且它们的开发人员试图保持它们的语法有些相似。然而,创建一个统一的工具会带来一系列版权和所有权问题。

如果有人试图在这一点上改变任何东西,当然会存在向后兼容性问题。

© www.soinside.com 2019 - 2024. All rights reserved.