Используя Regexp :: Grammars Дамиана Конвея, я пытаюсь сопоставить различные механизмы сбалансированного цитирования ('foo'
, "foo"
, но не 'foo"
) - такие как парены, кавычки,двойные кавычки и двойные доллары.Это код, который я сейчас использую.
<token: pair> \'<literal>\'|\"<literal>\"|\$\$<literal>\$\$
<token: literal> [\S]+
Обычно он работает нормально и позволяет мне сказать что-то вроде:
<rule: quote> QUOTE <.as>? <pair>
Мой вопрос: как мне изменить вывод,чтобы исключить обозначение игл для токена pair
?
{
'' => 'QUOTE AS \',\'',
'quote' => {
'' => 'QUOTE AS \',\'',
'pair' => {
'literal' => ',',
'' => '\',\''
}
}
},
Здесь, очевидно, нет никакого желания иметь pair
между, кавычкой и значением literal
.Есть ли лучший способ сопоставить 'foo'
, "foo"
и $$foo$$
, а может быть, иногда ( foo )
, не создавая каждый раз ненужный токен pair
?Могу ли я предварительно обработать этот токен или сложить его в вышеприведенное?Или напишите лучшую конструкцию, полностью исключающую необходимость в ней?