Фон:
Я реализую язык, похожий на Ruby, под названием Sapphire, чтобы опробовать некоторые идеи, которые у меня есть параллелизм в языках программирования. Я пытаюсь скопировать строки Ruby в двойные кавычки со встроенным кодом, который я считаю очень полезным как программист.
Вопрос:
Как любой из интерпретаторов Ruby превращает строку в двойных кавычках со встроенным кодом в AST?
eg:
puts "The value of foo is #{@foo}."
puts "this is an example of unmatched braces in code: #{ foo.go('}') }"
Подробности:
У меня проблема в том, как решить, какой }
закрывает блок кода. Блоки кода могут иметь в себе другие фигурные скобки, и, приложив немного усилий, их можно не сравнить. Лексер может найти начало блока кода в строке, но без помощи анализатора он не может точно знать, какой символ является концом этого блока.
Похоже, что parse.y
файл Ruby выполняет шаги лексирования и синтаксического анализа, но при чтении это кошмар это 11628 строк без комментариев и большого количества сокращений.
%Q{{hi}} #=> "{hi}"
- person Alex Wayne   schedule 31.01.2014ST
символST
(см. Пробел послеST
) не закрывает heredoc. 2. Существует специальный синтаксис:var1=<<-ST
, который позволяет вам ставить пробелы перед завершающей строкой (допустимо `ST`). 3. Heredocs может встречаться несколько раз, иa,b=<<S,<<S
является допустимой первой строкой heredocs. - person Darek Nędza   schedule 01.02.2014