Этот код грамматики автономный правило дает ожидаемый результатКак правила духовного процесса?
term = (double_ >> "+" >> term) [_val = _1 + _2]|
(double_ >> "-" >> term) [_val = _1 - _2]|
(double_ >> "*" >> term) [_val = _1 * _2]|
(double_ >> "/" >> term) [_val = _1/_2]|
double_ [_val = _1] ;
в то время как это один не делает:
term = (term >> "+" >> term) [_val = _1 + _2]|
(term >> "-" >> term) [_val = _1 - _2]|
(term >> "*" >> term) [_val = _1 * _2]|
(term >> "/" >> term) [_val = _1/_2]|
double_ [_val = _1] ;
Я предполагаю, что это имеет какое-то отношение рекурсии двусмысленности ... Что делает второе правило пытается делать при подаче: «1 + 2 + 3»?
Есть ли хороший документ, который схематически объясняет, как выполняется синтаксический анализ духа? Я имею в виду как чистый c или алгоритм, без шаблона или классов.
EDIT: На самом деле, я думаю, что второе правило должно завершиться неудачно во время компилятора, поскольку оно неоднозначно.
Если это не двусмысленный _C++ _ код, компилятор разрешит его. – sehe
с использованием проверки концепции boost и некоторых методов мета-программирования, я считаю, что дух может вернуть ошибку? не так ли? –