在学校里,我们被分配设计一种语言,然后去实现它,(我在实现它时玩得很开心=))。我的老师告诉我们使用 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
只有一堆句子的类,对吗?eval
然后在所有s 上调用一个抽象方法Sentence
,所以我最初编译语言的方法只包括两个阶段:
- 识别每行的语法
- 为每一行创建对应的类
当然,如果任何阶段 Ii 出现问题,都可能引发错误。
我的问题是,我做错了吗?我应该像理论所说的那样遍历所有阶段(词汇、句法、语义)吗?我应该继续使用我幼稚的两阶段编译器吗?