Как установить API из lex yacc в Программу

Я создаю .exe ФАЙЛ, который может анализировать выражение, сгенерированное lex и yacc. Но я делаю это, просто получаю ввод с экрана и просто возвращаю результат парсера с экрана. Я видел некоторые предложения по использованию YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size), но я все еще не мог найти хороший способ сделать это.

Возможно ли, что я поместил несколько заголовков (которые скомпилированы с помощью lex yacc) в мою основную программу c ++, а затем я могу использовать yylex () для ее вызова, давая строку в качестве ввода и получая возвращаемое значение в основной программе? Спасибо за вашу помощь, я не понимаю, как это реализовать. Благодарю.

0

Решение

yy_scan_string это то, как вы даете flex строку в качестве ввода. Вы называете это сначала, а затем позвоните yylex и он будет использовать эту строку в качестве входных данных для получения токенов, а не stdin, Когда вы получаете EOF от yylex, он отсканировал всю строку. Вы можете позвонить yy_delete_buffer на YY_BUFFER_STATE вернулся yy_scan_string (чтобы освободить память) и позвонить yy_scan_string еще раз, если вы хотите отсканировать новую строку.

Ты можешь использовать yy_scan_buffer вместо этого, чтобы сохранить немного копирования, но затем вы должны настроить буфер самостоятельно (в основном, это должно закончиться два NUL байтов вместо одного).

К сожалению, нет стандартного заголовочного файла от flex, объявляющего их. Поэтому вам нужно либо где-то объявить их самостоятельно (скопировать декларации из документации flex), либо вызвать их в 3-м разделе .l файл, который дословно копируется в конец lex.y.c файл.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]