CoffeeScript: вычислить дерево разбора (например, coffee -n) в программе

Есть ли способ вычислить дерево синтаксического анализа CoffeeScript для программы (в виде строки) внутри CoffeeScript без вызова внешней программы?

Например, допустим, у меня есть строка 'square=(n)->n*n' внутри программы CoffeeScript. Я хочу получить тот же вывод, что и сохранение этой строки в файле square.coffee и вызов в командной строке coffee -n square.coffee --- но без создания другого процесса:

Block
  Assign
    Value "square"
    Code
      Param "n"
      Block
        Op *
          Value "n"
          Value "n"

Пожалуйста, предоставьте вашему решению ссылку на документацию, как интерпретировать полученную структуру данных.

1 ответ

Решение

Просто посмотрите в источнике: -n флаг вызывает (require 'coffee-script).nodes, Результатом является синтаксическое дерево, которое соответствует grammar.coffee и будет интерпретировано с node.coffee.

Итак, это:

(require 'coffee-script').nodes 'square = (n)->n*n'

Даст вам синтаксическое дерево. Прежде чем распечатать его, вы можете использовать его toString метод, чтобы получить тот же результат, что и coffee CLI.

Для операций файловой системы, просто используйте узел readFile или же readFileSync от fs библиотека:

{readFileSync} = require 'fs'
{nodes}        = require 'coffee-script'

nodes readFileSync('squares.coffee').toString()
Другие вопросы по тегам