Информация об изменениях

Сообщение Re: [Nitra] Rust raw string literals от 10.02.2016 9:53

Изменено 10.02.2016 12:31 VladD2

Здравствуйте, pekabon, Вы писали:

P>А подскажите, плз, как написать правило для парсинга subj?

P>https://doc.rust-lang.org/reference.html#raw-string-literals

Чтобы решить проблему в корне (а за одно и кучу других, например, парсинг отступных грамматик) нужно реализовывать параметризованные правила и сематические предикаты. Это не быстрая песня и по уму ею нужно заниматься WolfHound-у.

Но для практического применения будет достаточно описать 5-10 правил парсящих литералы с заданной длинной последовательностей '#':
syntax RawStringLiteral1 = Open (!Close Any)* Close
{
  regex Sharps = "#";
  regex Open   = "r" Sharps '\"';
  regex Close  = '\"' Sharps;
} 

syntax RawStringLiteral1 = Open (!Close Any)* Close
{
  regex Sharps = "##";
  regex Open   = "r" Sharps '\"';
  regex Close  = '\"' Sharps;
} 

syntax RawStringLiteral1 = Open (!Close Any)* Close
{
  regex Sharps = "###";
  regex Open   = "r" Sharps '\"';
  regex Close  = '\"' Sharps;
} 

// ... размножаем нужное количество раз
Re: [Nitra] Rust raw string literals
Здравствуйте, pekabon, Вы писали:

P>А подскажите, плз, как написать правило для парсинга subj?

P>https://doc.rust-lang.org/reference.html#raw-string-literals

Чтобы решить проблему в корне (а за одно и кучу других, например, парсинг отступных грамматик) нужно реализовывать параметризованные правила и сематические предикаты. Это не быстрая песня и по уму ею нужно заниматься WolfHound-у.

Но для практического применения будет достаточно описать 5-10 правил парсящих литералы с заданной длинной последовательностей '#':
syntax RawStringLiteral1 = Open (!Close Any)* Close
{
  regex Sharps = "#";
  regex Open   = "r" Sharps '\"';
  regex Close  = '\"' Sharps;
} 

syntax RawStringLiteral2 = Open (!Close Any)* Close
{
  regex Sharps = "##";
  regex Open   = "r" Sharps '\"';
  regex Close  = '\"' Sharps;
} 

syntax RawStringLiteral3 = Open (!Close Any)* Close
{
  regex Sharps = "###";
  regex Open   = "r" Sharps '\"';
  regex Close  = '\"' Sharps;
} 

// ... размножаем нужное количество раз