def
给定一门语言, 定义它的文法的一种表示, 并定义一个解释器, 该解释器使用该表示来解释语言中的句子。
usage
● 解释器模式会引起类膨胀
每个语法都要产生一个非终结符表达式, 语法规则比较复杂时, 就可能产生大量的类文件, 为维护带来了非常多的麻烦。
● 解释器模式采用递归调用方法
每个非终结符表达式只关心与自己有关的表达式, 每个表达式需要知道最终的结果, 必须一层一层地剥茧, 无论是面向过程的语言还是面向对象的语言, 递归都是在必要条件下使用的, 它导致调试非常复杂。 想想看, 如果要排查一个语法错误, 我们是不是要一个断点一个断点地调试下去, 直到最小的语法单元。
● 效率问题
解释器模式由于使用了大量的循环和递归, 效率是一个不容忽视的问题, 特别是一用于解析复杂、 冗长的语法时, 效率是难以忍受的。