бодрость духа: как анализировать, пока у нас не будет & quot; — & gt; & quot;

Я пытаюсь разобрать rule формы predicate -> action,

Моя проблема в том что predicate может быть любое допустимое математическое выражение, так что на самом деле он может включать знак минус или больший знак (но мы должны запретить их по порядку, так как это знак, который мы хотим отделить predicate от action).

По сути, я хотел бы predicate потреблять все не пробелы, пока не попадет в строку "->",

Как мне это сделать?

Правильный ли подход для исправления строки, которую я прокомментировал ниже, или мне лучше определить, что predicate в терминах правильного выражения, и пусть анализатор попадет в "->" когда predicate заканчивается, согласно этому действительному выражению?

rule %=
predicate
>> "->">> action
;

predicate %= (+~(qi::char_("-"))); // BAD: works only if no minus sign in predicate
action    %= (+(qi::char_));

3

Решение

перефразировать predicate следующее:

predicate = +(qi::char_ - "->");
action    = +(qi::char_);

Эквивалентное

predicate = +(!qi::lit("->") >> qi::char_);

должен сделать то же самое.

Посмотреть документы

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector