Я пытаюсь разобрать 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_));
перефразировать predicate
следующее:
predicate = +(qi::char_ - "->");
action = +(qi::char_);
Эквивалентное
predicate = +(!qi::lit("->") >> qi::char_);
должен сделать то же самое.
Посмотреть документы
Других решений пока нет …