0. Определение режима интерпретатора:
Учитывая язык, определите представление его грамматики и определите интерпретатора, который использует представление для интерпретации предложений на языке. Принадлежит поведенческому режиму.
Режим интерпретатора используется очень мало в реальной разработке системы, потому что он может вызвать такие проблемы, как эффективность, производительность и обслуживание.
Общая классовая диаграмма режима интерпретатора показана на рисунке.
1. Преимущества режима интерпретатора
Интерпретатор - это простой инструмент анализа синтаксиса. Его наиболее выдающимся преимуществом является его расширение. Модификация синтаксических правил-это просто изменение соответствующего некомминального выражения. Если вы расширяете синтаксис, вам просто нужно добавить некомминальный класс.
2. Недостатки режима интерпретатора
Паттерн интерпретатора вызовет расширение класса: каждый синтаксис должен произвести некомминальное выражение. Когда правила синтаксиса являются относительно сложными, может быть сгенерировано большое количество файлов класса, что доставляет много проблем для технического обслуживания.
Образец интерпретатора принимает метод рекурсивного вызова: каждое неледственное выражение заботится только о выражениях, связанных с самим собой. Каждое выражение должно знать конечный результат и должно быть слой с покрытием по слою. Будь то процесс, ориентированный на процесс или объектно-ориентированный язык, рекурсия используется в необходимых условиях, что приводит к очень сложной отладке. Подумайте об этом, если мы хотим устранить ошибку синтаксиса, необходимо ли нам отлаживать один за другим, до самого маленького синтаксического блока?
Проблема эффективности: в режиме интерпретатора используется много петли и рекурсии, эффективность является проблемой, которую нельзя игнорировать, особенно при использовании для анализа комплекса и длительного синтаксиса. Эффективность невыносима.
3. Используйте сценарии режима интерпретатора
Повторные проблемы могут использоваться в режиме интерпретатора: например, несколько серверов приложений генерируют большое количество журналов каждый день, и файлы журнала необходимо проанализировать и обрабатывать. Поскольку форматы журнала каждого сервера различны, элементы данных одинаковы. Согласно интерпретатору, выражения терминатора одинаковы, но необходимо сформулировать выражения не концевых. В этом случае проблема может быть решена раз и на всю программу.
Сценарий, в котором необходимо объяснить простой синтаксис: почему это просто? Посмотрите на не концевые выражения. Чем больше грамматических правил, тем выше сложность и рекурсивные вызовы между классами (см. В нашем примере стек), что обычно не является сложным. Подумайте об этом, какое терпение и уверенность вам нужно для устранения проблем при вызове нескольких классов. Следовательно, режим интерпретатора обычно используется для анализа сравнительных стандартных наборов символов, таких как анализ синтаксиса SQL, но эта часть постепенно заменяется специализированными инструментами. В некоторых специальных бизнес -средах также будет использоваться модель интерпретатора. Пример, который мы только что сделали, - это бизнес -среда, и сейчас есть много примеров модельных операций. Многие коммерческие учреждения могут предоставить большое количество данных для анализа.
4. Простые примеры
/ *** Объявит операцию абстрактной интерпретации*/ public interface interpreter {public void интерпретация (контекст контекста); // Фактически, может быть возвращенный тип для определения интерпретируемого объекта данных} Открытый класс XMLSaxInterpreter реализует интерпретатор {@Override public void интерпретация (контекст контекста) {System.out.println ("xml sax interpreter:" + context.getdata ()); }} public Class XmldomInterpreter реализует интерпретатор {@Override public void интерпретация (контекст контекста) {System.out.println ("xml dom interpreter:" + context.getData ()); }} / *** Содержит некоторую информацию за пределами интерпретатора* / public Class Context {Private String Data; public String getData () {return Data; } public void setData (String Data) {this.Data = data; }} public Class Test {public static void main (string [] args) {context context = new Context (); context.setData («часть данных XML»); new xmlsaxInterpreter (). интерпретация (контекст); new xmldominterpreter (). интерпретация (контекст); }}5. Примечания в режиме интерпретатора
Постарайтесь не использовать режим интерпретатора в важных модулях, в противном случае обслуживание будет большой проблемой. В проекте вы можете использовать такие языки сценариев, как Shell, Jruby и Groovy, чтобы заменить режим интерпретатора, чтобы компенсировать недостатки языков, скомпилированных Java. Мы используем Jruby для обработки расчетов в аналитическом проекте банка, избегая четыреххамерной работы в режиме интерпретатора и хорошо выполняя все аспекты эффективности и производительности.