Подтвердить что ты не робот

Что такое "Push Approach" и "Pull Approach" для синтаксического анализа?

В рамках подхода синтаксического разбора push синтаксический анализатор генерирует синхронные события, поскольку документ анализируется, и эти события могут обрабатываться приложением с использованием модели обработчика обратного вызова

Это текст, приведенный в книге Pro XML Development с Java о SAX 2.0.

Что касается StAX, в книге говорится:

Под тяговым подходом события вытягиваются из документа XML под управлением приложения используя синтаксический анализатор.

Я хочу спросить, в чем смысл выделенного текста? Ответ, отвечающий новичкам, оценивается:)

4b9b3361

Ответ 1

В принципе, толчок - это когда парсер говорит некоторому обработчику: "У меня есть foo, сделайте с ним что-нибудь". Притяжение - это когда обработчик говорит парсеру: "Дайте мне следующий foo".

Нажмите

if (myChar == '(')
    handler.handleOpenParen(); // push the open paren to the handler

Прицепные:

Token token = parser.next(); // pull the next token from the parser

Ответ 2

Push Parsers. События генерируются API в виде функций обратного вызова, таких как startDocument(), endDocument() и не зависят от программиста. Мы, как программист, могли обрабатывать события, но генерация событий не поддается контролю.

Pull Parsers. События генерируются, когда мы вызываем некоторый API. Пример, показанный ниже. Поэтому мы, как программист, можем решить, когда создавать события.

   int eventType = xmlr.getEventType();
while(xmlr.hasNext()){
     eventType = xmlr.next();
     //Get all "Book" elements as XMLEvent object
     if(eventType == XMLStreamConstants.START_ELEMENT && 
         xmlr.getLocalName().equals("Book")){
        //get immutable XMLEvent
        StartElement event = getXMLEvent(xmlr).asStartElement();
        System.out.println("EVENT: " + event.toString());
     }
} 

клиент получает (извлекает) только данные XML, когда он явно запрашивает его.

При синтаксическом анализе pull клиент управляет потоком приложения и может при необходимости использовать методы анализатора. В отличие от этого, с обработкой push, парсер управляет потоком приложения, и клиент может принимать только вызовы из синтаксического анализатора.

Ответ 3

push синтаксический анализ:, где синтаксический анализатор передает события синтаксического анализа в приложение, возможно, используя методы обратного вызова. Приложение может обрабатывать асинхронно после вызова любых методов парсера, так что если парсер занимает время, приложение не застревает в этой точке. Как только синтаксический анализ завершен, синтаксический анализатор через свое событие обратного вызова запускает приложение, чтобы приложение могло продолжить работу с результатом анализа.

вытягивать разбор:, когда приложение вытягивает данные, а не ждет событий синтаксического анализа. Приложение может извлекать данные одним способом, в соответствии с его требованиями. как в StAX, приложение вызывает next() метод iteretively, чтобы получить следующую конструкцию в XML.