2015-08-23 3 views
-1

Я пытаюсь лучше понять рекурсивный парсер спуска - в частности https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js. Я смущен о цели следующей функции:Устранение неполадок рекурсивного анализа спуска

next = function (c) { 

// If a c parameter is provided, verify that it matches the current character. 

      if (c && c !== ch) { 
       error("Expected '" + c + "' instead of '" + ch + "'"); 
      } 

// Get the next character. When there are no more characters, 
// return the empty string. 

      ch = text.charAt(at); 
      at += 1; 
      return ch; 
     }, 

Может кто-то пожалуйста, помочь моему пониманию этого? Насколько я понимаю, в настоящее время (вероятно, я ошибаюсь) он проверяет, не является ли аргумент (с) не таким же, как следующий символ в строке? Если да, то в чем смысл этого? Любая помощь будет оценена по достоинству.

ответ

0

Вы сообщили только о части следующей функции. Вот полное тело:

 next = function (c) { 

// If a c parameter is provided, verify that it matches the current character. 

      if (c && c !== ch) { 
       error("Expected '" + c + "' instead of '" + ch + "'"); 
      } 

// Get the next character. When there are no more characters, 
// return the empty string. 

      ch = text.charAt(at); 
      at += 1; 
      return ch; 
     }, 

И объяснение в комментарии: сначала проверяет, если символ передается в качестве параметра (если таковой имеется), присутствует в строке. После этого, в любом случае, получите следующий символ входной строки.

+0

Спасибо за ваш ответ. Так делает ли инструкция if проверить, присутствует ли аргумент (c) во всей строке или только остальная часть строки? Я немного смущен как «if (c && c! == ch)», кажется, указывает мне, что он проверяет, не соответствует ли текущий символ следующему? Благодарим за терпение. –

+0

Нет, первый тест предназначен для проверки того, что символ фактически передан функции (если вы посмотрите на остальную часть кода, вы увидите, что 'next' может быть вызван либо как' next() ', либо как' next ('-') 'или аналогичный). – Renzo

Смежные вопросы