Попытка понять синтаксис scala ^^ - PullRequest
0 голосов
/ 23 марта 2020

Я новичок в scala и смотрю этот урок: http://enear.github.io/2016/03/31/parser-combinators/

Событие, которое объясняется чуть ниже:

The ^ Оператор ^ действует как отображение результата анализа. Регулярное выражение "[a-zA-Z _] [a-zA-Z0-9 _] *". R неявно преобразуется в экземпляр Parser [String], для которого мы отображаем функцию (String => IDENTIFIER), возвращая таким образом экземпляр Parser [IDENTIFIER].

Я не понимаю этот фрагмент кода:

def identifier: Parser[IDENTIFIER] = {
  "[a-zA-Z_][a-zA-Z0-9_]*".r ^^ { str => IDENTIFIER(str) }
}

Может кто-нибудь объяснить оператор ^^ и как он отображается на блочный код?

Спасибо

1 Ответ

2 голосов
/ 23 марта 2020

Определяет операцию, которую необходимо выполнить, когда вычисляется левое выражение.

Например, у нас есть такой код:

def symbol: Parser[Any] = "+" | "-" | "*"

def number: Parser[Int] = """(0|[1-9]\d*)""".r ^^ {string =>  string.toInt }

def expression = {
    number ~ symbol ~ number ^^ { case firstOperand ~ operator ~ secondOperand =>
      firstOperand + secondOperand
    }
  }

Итак, здесь в число мы конвертируем String в Int. Это означает, что когда мы будем использовать наш синтаксический анализатор следующим образом:

parse(expression, "3 + 2")

Он вернет нам 5, если мы не преобразуем его и не оставим как строки, мы получим «32».

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