Skip to content

Калькулятор полиномов, реализованный на YACC и LEX

Notifications You must be signed in to change notification settings

kisrefod/Polynomial-Calculator-YACC-LEX

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Компилировать в Линухе с помощью make, либо Семьянов сам вобьет команды. Но лучше, на всякий случай, заучить их "типа ты шаришь". Исходники - gram.lex, gram.y, source.c, polynom.h. Их нужно отослать Семьянову в специально-оформленном архиве - прочитаешь в группе по Грамматикам. Можешь переименовать файлы, но следи за makefile-ом и зависимостями в файлах. Команда запуска: ./compiler [имя файла - для примера text.txt] Как это вообще работает:

  1. Лексер gram.lex считывает символы по regexp-ам (регулярным выражениям). Если в регекспы ничего не попало, то он просто выведет эти "лишние" символы. Если в регекспы что-то попало, то он исполняет код на Си и возвращает указанный токен в парсер gram.y. Пример "x+1" вернет токен LETTER PLUS DIGIT. Конкретное значение передается через yylval.
  2. Парсер gram.y получает токены от Лексера и по этим токенам получает сообщение, основанное на правилах грамматики. Правила устроены рекурсивно. Например, "x+1" вернет токены LETTER, который трактуется только как monomial (одночлен); monomial, в свою очередь трактуется только как polynom; тот трактуется, как левый опперанд правила polynom PLUS polynom, т.к. дальнейшие токены только в это выражение вписываются; polynom PLUS polynom трактуется, как polynom; polynom EOC (EOC - End of Command = '\n' - следующий считанный символ) трактуется, как begin; begin трактуется, как start, start - корневое правило (указано выше в строке %start start). В процессе трактовок исполняется соответствующий Си-код, который производит вычисления полиномов с помощью функций из source.c.
  3. На этом все.

About

Калькулятор полиномов, реализованный на YACC и LEX

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published