Questions tagged «pragmatism»

6
为什么将词法分析器实现为二维数组和巨型开关?
我正在慢慢地完成学业,这个学期是Compilers101。我们正在使用Dragon Book。在课程开始不久,我们将讨论词法分析以及如何通过确定性有限自动机(以下称DFA)来实现它。设置各种词法分析器状态,定义它们之间的过渡等。 但是教授和这本书都建议通过过渡表来实现它们,过渡表相当于一个巨大的2d数组(一个维的各种非终端状态,而另一个维可能的输入符号),以及一个用于处理所有终端的switch语句以及在非终端状态下调度到过渡表。 这个理论很好,但是作为一个几十年来实际编写代码的人,实现是不道德的。它不可测试,不可维护,不可读,调试起来很麻烦。更糟糕的是,如果该语言具有UTF功能,那么我将看不到它在远程实用。每个非终端状态都有一百万个左右的过渡表条目,这会很不方便。 那怎么办?为什么有关该主题的权威书籍说要这样做呢? 函数调用的开销真的那么多吗?当语法不为人所知时(正则表达式?),这是否行得通?也许可以处理所有情况的东西,即使更具体的解决方案更适合于更具体的语法? (注意:可能重复的“ 为什么使用OO方法而不是巨大的switch语句? ”已经很接近了,但我并不关心OO。使用功能性方法甚至具有独立功能的更明智的命令式方法都可以。) 并且为了示例,考虑一种仅具有标识符的语言,而这些标识符为[a-zA-Z]+。在DFA实施中,您将获得以下内容: private enum State { Error = -1, Start = 0, IdentifierInProgress = 1, IdentifierDone = 2 } private static State[][] transition = new State[][]{ ///* Start */ new State[]{ State.Error, State.Error (repeat until 'A'), State.IdentifierInProgress, ... ///* IdentifierInProgress */ new …

11
当您是一个务实的人时,如何不遭受思想家的困扰?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我是一个务实的人(我想我是。但是话又说回来,乔恩(Jon)有一个有趣的观点)。有时候,完成问题的最简单解决方案是最适合我的解决方案,如果这不是完全亵渎和谴责任何设计原则的话。在Stack Overflow上查看我对这个问题的回答。简单。作品。被接受了。有待改进。显然不是很完美,也不是很详尽。这个家伙也随之而来。他对我投了反对票,对以下问题进行了评论:他的回答如何更好,更准确等;当我问他为什么对我投了反对票时,他在评论中称我为错误。让我想起了这部漫画。 直截了当:他的答案显然更好。但这不是重点! 在Stack Overflow上时,我会笑而不是真正关心这些事情,因为这些人相距遥远,在现实世界中,我时不时地遭受着意识形态的折磨。哎呀,我不是在创造奇迹的软件,我需要保持巨大的遗产运行,这对我来说每天都是一次冒险。我擅长某些方面,而其他方面则不好。我渴望学习东西。但是我可以接受系统中的一两个缺陷:缺陷。明天,我们将重构所有这些,但是首先让我们做客户想要的,然后再喝啤酒。 我的问题是: 当您是一个务实的人时,您如何应对意识形态/意识形态学家? 当您是一个思想主义者时,您如何应对实用主义/实用主义者? 我对这两种观点都感兴趣。

9
代码审查有什么好处?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 在我的团队中,我们不进行正式的代码审查。我们倾向于认为使用结对编程和经常旋转结对就足够了。 我们应该考虑进行正式的代码审查吗?有什么好处?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.