Объектно-ориентированные шаблоны проектирования для разбора текстовых файлов? - PullRequest
5 голосов
/ 24 января 2012

Как часть программного пакета, над которым я работаю, мне нужно реализовать синтаксический анализатор для текстовых файлов приложения. Я уже указал грамматику для этого файла на бумаге, но мне трудно перевести ее в легко читаемый / обновляемый код (сейчас он просто пропускает каждую строку через огромное количество операторов switch).

Итак, есть ли хорошие шаблоны проектирования для реализации синтаксического анализатора в среде OO в стиле Java?

Ответы [ 3 ]

5 голосов
/ 24 января 2012

Любой простой способ разбить массивный коммутатор на дизайн ОО состоит в том, чтобы иметь

псевдокод

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 наметод на этом объекте токена, чтобы определить, относится ли следующий бит строки к этому типу токена.

Ранее:

class TokenParse {
     public void parseTokens(string data) {
          for each step in data {
               switch (step) {
                    case x: 
                         ...
                    case y:
                         ...
                    ...
               }
          }
          ...
     }
}
1 голос
/ 04 декабря 2012

Одним из предложений является создание файла свойств, в котором вы определяете правила. Загрузите его во время выполнения и используйте цикл if else (поскольку операторы switch тоже делают то же самое внутри). Таким образом, если вы хотите изменить некоторые правила синтаксического анализа, вы должны изменить файл .property, а не код. :)

0 голосов
/ 24 января 2012

Вы должны научиться выражать контекстно-свободные грамматики. Вы должны подумать о GoF Interpreter и парсере / генераторах, таких как Bison, ANTRL, lex / yacc и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...