gpt4 book ai didi

java - 如何实现一种算法来检查 Python 代码的缩进

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:56:31 25 4
gpt4 key购买 nike

我最近面试了一家本地科技公司的 Java 开发人员角色,被要求编写一个 Java 程序来检查 python 代码中缩进的正确性(至少找到第一个缩进错误)。

处理defwhilefor 可能更容易。然而,处理像 if...elif...else 这样的事情是很棘手的。有不同的情况,比如只有if没有else或者elif;嵌套的 if。如果是配对的,也许我可以使用一个堆栈,但你不知道它们是否配对。

我真的可以在这里使用一些建议。

最佳答案

在我看来,有两种不同的方法可以解决这个问题。

  1. 将 python 代码转换为某种类似于上下文无关文法 (CFG) 的中间格式,然后对 CFG 执行错误检查。
  2. 案例检查。

前者更优雅一些,围绕着编译器理论,或者至少是自动机理论。虽然这个过程保证有效并建立了某种人们可以引用的语言,但对于时间敏感的事情来说它可能非常乏味。这是对看似简单任务的精心修复。这种技术的优点是,如果我们正在寻找一个“hacky”解决方案,例如找到“:”然后检查下一行是否缩进,这可能不适用于 python 中的某些内联命令使用“:”。例如 print("Enter your name:")subprocess.Popen 命令。这种情况将确保避免此类错误。

另一方面,作为程序员,后者极难跟踪,调试起来也相当困难。我以某种相对论的方式这么说,有几种情况需要检查,顶级陈述。因此,让我们使用一些“良好的编程习惯”,因为关键字 def if elif else class etc 可以存储在一个公共(public)位置为了解决这个问题,我们将声明一些变量(我们称它为 i,逐行读入文件并检查第一个(或第零个字符)。如果字符不是空格,我们将读取到下一个空格并检查该单词是否存在于某些 Trie 中定义缩进 block 的单词(您也可以使用散列,没有区别)。如果它在其中一个 block 中,则将 i 增加 4 并移至下一行。在随后的行中,您将阅读第 i 个字符并确保它们是空格。本质上,您将重复此过程,直到找到与正在查找的内容相矛盾的内容。现在,如果某些内容与我们的内容相矛盾正在寻找,我们可能不得不阅读上一行。考虑

long_sequence = [1,2,3,4,1,2,3,4,1,2,3,4,
5,6,7]

现在,这在技术上会引发错误,因此我们必须考虑这种情况以及与此类似的几种情况,其中一行比一行长,但命令在一行中不完整。

因此,如前所述,解决方案 2 将非常乏味并且是调试噩梦,解决方案 1 很优雅但很难构建。这确实取决于您必须构建它的时间表。

关于java - 如何实现一种算法来检查 Python 代码的缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44812996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com