在学校里,我们被分配去设计一门语言,然后实施它(我有很多乐趣实现它=))。我的老师告诉我们使用YACC /法,但我决定去与Java +正则表达式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
所有Sentence
S,所以我最初的做法complie语言仅包括两个阶段:
- 确定SEACH行的语法
- 每行
当然,如果在任何阶段出现问题,Ii都可能引发错误。
我的问题是,我做错了吗?我是否应该像理论说的那样遍历所有阶段(词汇,语法,语义)?我应该继续使用我的天真的两阶段编译器吗?
大错误。你应该学习解析,而不是用正则表达式来解决问题。您应该切换到使用Java解析系统(如Jack),或者更好的方法是使用BYACC/J http://byaccj.sourceforge.net/,以便您更好地与类同步。 – 2009-11-11 15:56:38