【发布时间】:2009-11-11 15:36:05
【问题描述】:
在学校,我们被指派设计一种语言,然后实施它,(我在实施它时获得了很多乐趣 =))。我的老师告诉我们使用 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
嗯,如您所见,它是一种非常基本的语言 =)。
我认为我可以以一种非常 OOP 的方式实现它,比如创建一个抽象类 Sentence,然后拥有像 VariableAssignment、IfSentence 等子类,并拥有一个类 Program,它只是一堆句子对吗?然后在所有Sentences 上调用一个抽象方法eval,所以我最初编译该语言的方法只包括两个阶段:
- 识别每行的语法
- 为每一行创建对应的类
当然,如果任何阶段 Ii 出现问题,都可能引发错误。
我的问题是,我做错了吗?我应该像理论所说的那样遍历所有阶段(词汇、句法、语义)吗?我应该继续使用我幼稚的两阶段编译器吗?
【问题讨论】:
-
大错特错。您应该学习解析,而不是使用正则表达式。您应该改用 Java 解析系统,例如 Jack,或者更好的是,使用 BYACC/J byaccj.sourceforge.net,这样您就可以与课程更加同步。
标签: java code-analysis compiler-theory