Я рассчитал все первые наборы каждого производства в соответствии с https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of%20C%20in%20Backus-Naur%20form.htm,, но я обнаружил, что первые наборы сильно конфликтуют.
Например, код, подобный этому:
static int test () {}
|
входной токен является статическим, но я не знаю, является ли это function-definition
или declaration
(потому что оба первых набора производства имеют токен static / int / identifier), пока мой курсор не достигнет {
token.
Так есть ли способ выбрать правильную продукцию без недостатков?