Я строю компилятор для забавы, и в настоящее время я застрял на том, Как анализировать, когда несколько глобальных переменных или определений функций находятся в одном файле, например,
int a;
int b;
int main(){
int c;
}
файл моего бизона (упрощенный) выглядит так:
ROOT : GLOB { printf("%s\n", "ACCEPTED" }
;
VAR_DEC // Assume this matches correctly
FUNC_DEF // Assume this matches correctly
GLOB_STMNT : VAR_DEC { }
| FUNC_DEF { }
;
GLOB_LIST : GLOB_LIST GLOB_STMNT { }
| GLOB_STMNT { }
;
GLOB : GLOB_LIST { }
;
Моя проблема здесь в том, что она всегда только уменьшает объявление firstvar, а затем печатает принятым. Любая идея о том, как уточнить последние 3 правила, чтобы уменьшить все 3 глобальных утверждения?