Szukam jasnej definicji tego, czym są „tokenizer”, „parser” i „lexer” i jak są one ze sobą powiązane (np. Czy parser używa tokenizera lub odwrotnie)? Muszę utworzyć program, który przejdzie przez pliki źródłowe c / h, aby wyodrębnić deklarację danych i definicje.
Szukałem przykładów i mogę znaleźć trochę informacji, ale naprawdę staram się zrozumieć podstawowe pojęcia, takie jak reguły gramatyczne, drzewa parsowania i abstrakcyjne drzewo składniowe oraz ich wzajemne powiązania. Ostatecznie koncepcje te muszą zostać zapisane w rzeczywistym programie, ale 1) jak one wyglądają, 2) czy istnieją wspólne implementacje.
Patrzyłem na Wikipedię na te tematy i programy, takie jak Lex i Yacc, ale ponieważ nigdy nie przeszedłem przez klasę kompilatora (kierunek EE), trudno mi w pełni zrozumieć, co się dzieje.