2014-10-12 55 views
1

在阅读了一些Steve Yegge的文章后,我一直在考虑学习bison/yacc。史蒂夫当然喜欢编译器,因此建议人们应该学习它们。他对于开发什么技能给予了很多其他的好建议,所以我想我会去看看。Bison/Yacc编程语言之外的使用案例?

我想知道的是 - 在构建自己的编程语言之外,lex/flex/yacc/bison的实际用例是什么?我确信有一个明显的使用案例,我错过了,但没有想到。

使用bison/yacc可以更容易/稳定地解决哪些类型的问题,而不是用正则表达式解析事情?

+1

它值得澄清你的语言是什么意思?例如,如果你的问题,是否意味着“通用编程语言”?当然,即使您只是处理小配置,用户交互或规范语言,您提到的工具也非常有用。 – 2014-10-12 04:19:51

+0

将语言的解析器编码视为构成语言的“构造”是很有趣的。注意完全构建的语言可能还需要为它们构建的解析器/编译器/验证器也很有用。 – 2014-10-12 04:21:02

+1

结合Flex和Bison,您可以轻松创建[计算器](http://dinosaur.compilertools.net/bison/bison_5.html#SEC27)。比通过全功能编程语言(如Java或C)编译内置计算器更容易。事实上,我曾经向一位朋友展示过,使用Flex和Bison可以在大约20分钟内编写一个工作内置计算器(显然,您必须知道每个语法的语法可以快速完成)。如果您知道输入的结构(并且输入是高度结构化的),那么您可以使用Flex/Bison快速完成任务。 – Jared 2014-10-12 04:30:02

回答

1

什么样的问题,你可以更容易/稳定地解决与 bison/yacc,而不是用正则表达式解析的东西?

大问题。

的语言保持跟踪的正则表达式的所有不同,潜在嵌套的词汇元素可以是艰巨的,和自动化工具可以使它更可行,易于维护,可共​​享等

什么是实际使用lex/flex/yacc/bison在 之外构建自己的语言的案例?

也许语言已经存在,但是你想为它实现一个解析器/编译器/验证器。可能采用新语言或与现有工具不同的平台。

+0

对,这些事情是有道理的。我想我很想知道这些用例,例如“在一堆文本文件中查找这种格式的地址”或“在用户提供的字符串上做一些疯狂的输入验证”。 – bitops 2014-10-12 04:47:26

+1

啊,现在你问,“如果我有一个非常适合正则表达式的问题,我是否也应该考虑将flex/yacc等作为可能的好工具来应用?”如果你能看到如何用正则表达式来解决这个问题,我会说通常不会,但它可能不值得自动化所提供的额外功能。 – 2014-10-12 04:51:39

+0

这绝对是有道理的,到目前为止,我在编程冒险中已经用了很多正则表达式。我想我想知道在哪里画“好吧,这个基于正则表达式的解析器是一个野兽”和“学习flex/bison/yacc /等的时间”之间的界限。 – bitops 2014-10-12 04:54:47