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()