作为我正在处理的软件包的一部分,我需要为特定于应用程序的文本文件实现解析器。我已经在纸上指定了这些文件的语法,但是很难将其转换为易于阅读/可更新的代码(现在,它只是通过大量的switch语句传递每一行)。

那么,在Java风格的OO环境中是否存在用于实现解析器的良好设计模式?

最佳答案

将大规模转换为OO设计的任何简单方法都是

伪代码

class XTokenType {
     public bool isToken(string data);
}

class TokenParse {
     public void parseTokens(string data) {
          for each step in data {
               for each tokenType in tokenTypess {
                    if (tokenType.isToken(step)) {
                         parsedTokens[len] = new tokenType(step);
                    }
                    ...
               }
          }
          ...
     }
}

在这里,您将每个switch语句分解为该 token 对象的方法,以检测字符串的下一位是否属于该 token 类型。

之前:
class TokenParse {
     public void parseTokens(string data) {
          for each step in data {
               switch (step) {
                    case x:
                         ...
                    case y:
                         ...
                    ...
               }
          }
          ...
     }
}

09-13 11:21