Я начал свой путь с рекурсивных синтаксических анализаторов и изучал грамматику C, пытаясь понять, как она работает, чтобы воспроизвести ее в моем коде.
Затем я увидел это:
assignmentExpression
: conditionalExpression
| unaryExpression assignmentOperator assignmentExpression
| DigitSequence // for
;
и эта часть, в частности:
unaryExpression assignmentOperator assignmentExpression
При моем (плохом и, вероятно, неправильном) понимании унарное выражение может быть константой (если вы следуете остальной части грамматики), тогда это выглядит так 1 = 1
действительно, что, очевидно, неправильно.Я искал синтаксические анализаторы C, даже исходный код GCC, и функции assignmentExpression никогда не имели никакого кода, связанного с частью unaryExpression.
Так что я действительно запутался;Я, наверное, упускаю что-то очень важное здесь.