Фонетический разбор класс: «Класс» фонетический разбор слова по составу, как сделать – ответ

java — Лучший способ структурировать класс парсера

спросил

Изменено 9 лет, 4 месяца назад

Просмотрено 2к раз

Я работаю над проектом, в котором мне нужно проанализировать текстовый файл и использовать эту информацию для некоторых операций с данными.

У меня есть класс парсера, в котором я использую массив для хранения данных из текстового файла. Затем у меня есть отдельный класс, который использует эти данные. Моя текущая настройка выглядит примерно так (очевидно, псевдокод):

 class Parser{
частный:
 массив проанализированных данных;
публичный:
 встроенный массив getParsedData () {
     вернуть проанализированные данные;
 }
};
алгоритмы класса{
//функции, использующие данные из массива parsedData;
};
 

Я чувствую, что довольно неэффективно просто иметь частный массив, а затем просто иметь публичную функцию, которая просто возвращает массив, который я могу разбрасывать.

Я чувствую, что есть лучший способ структурировать это. Любые предложения о том, как я должен структурировать свой код?

  • java
  • c++
  • oop
  • design-patterns

Вы правы, потому что здесь довольно много проблем:

  • Будет ли ваш парсер повторно использоваться ред?
  • Должен ли он быть потокобезопасным?
  • Вы анализируете массивный текстовый файл, и в этом случае буферизация проанализированных данных будет менее эффективной, чем их «потоковая передача».

Если у вас относительно небольшой текстовый файл и вы хотите использовать синтаксический анализатор только один раз в одном потоке, вам нужно может :

  • Инициализировать массив до нуля
  • Убедитесь, что поле массива является закрытым и не имеет сеттеров
  • Иметь метод разбора , который будет читать текстовый файл и устанавливать значение поля массива
  • Иметь синтаксический анализ генерировать исключение, если поле массива не равно нулю.

ОДНАКО, это сложно. Другой подход для небольших текстовых файлов, но вам нужно анализировать несколько раз:

  • Парсер будет иметь только один статический метод с именем parse , который принимает текстовый файл и возвращает проанализированный массив токенов.

Преимущество однометодного подхода заключается в том, что вам не нужно усложнять управление массивом токенов как вещью с отслеживанием состояния. И у вас есть меньший интерфейс, что приятно.

Наконец, если у вас есть большой текстовый файл, пусть ваш метод синтаксического анализа создает токены в виде потока.

В Java, по крайней мере, «return parsedData» вернет ссылку на ваш «частный массив».

Затем вызывающая программа может делать с parsedData все, что ей угодно;

Таким образом, это очень эффективно, поскольку передается только адрес, но если вы намеревались сохранить частную неизменяемую копию в своем классе, вам нужно будет вернуть копию parsedData, что было бы менее эффективно.

В c++ вам нужно будет явно вернуть ссылку или копию, но в Java ссылка — это все, что вы можете вернуть.

2

Класс парсера (System.CommandLine.Parsing) | Microsoft Узнайте

Редактировать

Твиттер LinkedIn Фейсбук Электронная почта

  • Артикул

Определение

Пространство имен:
System.CommandLine.Parsing
Сборка:
System.CommandLine.dll

Важный

Некоторая информация относится к предварительной версии продукта, который может быть существенно изменен до его выпуска. Microsoft не дает никаких явных или подразумеваемых гарантий в отношении представленной здесь информации.

Анализирует ввод командной строки.

 парсер открытого класса 
 парсер открытого класса 
 тип парсера = класс 
 парсер открытого класса 
наследование

Объект

Парсер

Конструкторы

Парсер()

Инициализирует новый экземпляр класса Parser, используя значение по умолчанию .

Анализатор(команда)
Парсер (CommandLineConfiguration)

Характеристики

Конфигурация

Конфигурация, на которой основаны грамматика и поведение парсера.

Методы

Равно(Объект)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от объекта)
ПолучитьHashCode()

Служит хеш-функцией по умолчанию.

(Унаследовано от объекта)
ПолучитьТип()

Получает тип текущего экземпляра.

(Унаследовано от объекта)
MemberwiseClone()

Создает поверхностную копию текущего объекта.

(Унаследовано от объекта)
Анализ (IReadOnlyList, строка)

Анализирует список аргументов.

admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

2024 © Все права защищены.