Парсер в Ruby: работа с липкими комментариями и цитатами - PullRequest
1 голос
/ 29 июля 2010

Я пытаюсь создать синтаксический анализатор рекурсивного спуска в Ruby для грамматики, которая определяется следующими правилами

  1. Ввод состоит из пробелов разделенных карточек , начинающихся с Стоп-слова , где пробел является регулярным выражением /[ \n\t]+/
  2. Карта может состоять из Ключевые слова или / и Значения , также разделенные пробелом, которые имеют карточный заказ / шаблон
  3. Все стоп-слова и ключевые слова нечувствительны к регистру, т.е.: /^[a-z]+[a-z0-9]*$/i
  4. Значением может быть строка в двойных кавычках , которая может не отделяться от другими словами через пробел, например ::1029*

    word"quoted string"word
    
  5. Значение также может быть словом /^[a-z]+[a-z0-9]*$/, или целым числом , или с плавающей точкой (например, -1.15 или 1.0e+2)

  6. Однострочный комментарий обозначается # и может не отделяться от другими словами, например ::1050*

    word#single-line comment\n
    
  7. Многострочный комментарий обозначается /* и */ и может быть не отделены от других слов, например ::1059

    word/*multi-line 
    comment*/word
    

# Input example. Stop-words are chosen just to highlight them: set, object
set title"Input example"set objects 2#not-separated by white-space. test: "/*
set test "#/*"
object 1 shape box/* shape is a Keyword, 
box is a Value. test: "#*/object 2 shape sphere
set data # message and complete are Values
0 0 0 0 1 18 18 18 1 35 35 35 72 35 35 # all numbers are Values of the Card "set"

Поскольку большинство слов разделены пробелами, какое-то время я думал о разделении всего ввода и разборе за словом. Чтобы разобраться с комментариями и цитатами, я собирался сделать

words = input_text.gsub( /([\"\#\n]|\/\*|\*\/)/, ' \1 ' ).split( /[ \t]+/ )

Однако таким образом содержимое строк (и комментариев, если я хочу их сохранить) изменяется. Как бы вы справились с этими липкими комментариями и цитатами?

1 Ответ

0 голосов
/ 05 августа 2010

ОК, я сделал это сам.Следующий код можно свести к минимуму, если его читабельность не нужна чтобы разобрать слова дальше.

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