gpt4 book ai didi

java - 语法分析题

转载 作者:行者123 更新时间:2023-11-29 09:46:35 26 4
gpt4 key购买 nike

在学校里,我们被分配去设计一门语言,然后去实现它,(我在实现它时玩得很开心 =))。我的老师告诉我们使用 yacc/lex,但我决定使用 java + regex API,这是我设计的语言的样子:

Program "my program"
var yourName = read()
if { equals("guy1" to yourName) }
print("hello my friend")
else
print("hello extranger")
end
Program End

好吧,如您所见,它是一门非常基础的语言 =)。

我想我可以用一种非常面向对象的方式来实现它,比如创建一个抽象类 Sentence 然后有子类比如 VariableAssignmentIfSentence等等,并且有一个 Program 类,它只是一堆句子,对吗?然后在所有 Sentence 上调用一个抽象方法 eval,所以我最初编写该语言的方法只包括两个阶段:

  1. 识别搜索行的句法
  2. 为每一行创建相应的类

当然,如果任何阶段 Ii 出现问题,都可能引发错误。

我的问题是,我做错了吗?我是否应该像理论所说的那样遍历所有阶段(词汇、句法、语义)?我应该继续使用我的原始两阶段编译器吗?

最佳答案

我不会问您为什么不听从导师的建议并使用 yacc/lex 这样明显的问题,因为我知道答案。您想离开并做一些您认为很酷并且可以帮助您学习的事情。不幸的是,这种方法是你的教授推荐的,因为正如另一篇帖子所说,在你探索多种方法并花费大量时间试图找到一个好的解决方案之前,有很多非常聪明的人。

您可以使两阶段编译器正常工作,但您需要接受这样的事实,即它永远不会像完成整个过程那样好,因为它更难检测到错误。事实上要难得多。在某些情况下,您甚至无法判断出有错误,直到为时已晚。即:已经编译并正在尝试运行。

如果您想了解更多有关它的信息,请采用两阶段方法,您会遇到与您之前遇到的人相同的问题。请务必了解,您需要更长的时间才能获得最终解决方案,您的项目可能会停靠点,并且可能无法正常工作。

也就是说,您将比类其他任何人学到更多。如果你有空闲时间,我会按照你现在的方式去做。这些知识可能会在未来派上用场。我还会与您的教授交谈并告诉他您将根据他的建议以另一种方式进行,因为您想有一个更透彻的理解。也许他不会因为您的项目雄心勃勃而扣分,即使结果是错误的。

毕竟在大学里做项目的意义在于学习。

关于java - 语法分析题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1715984/

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