我认为使用 GNU Readline 库作为命令行提示符很好,我希望我正在处理的 shell 具有该功能。现在 readline 对我有用(我的环境是 CLion、CMake、Ubuntu、BSD、C、flex-lexer 和柠檬解析器)但我还需要 flex 和 yacc 同时工作以扫描和解析输入,但代码似乎“不相容”——真的吗?
params[0] = NULL;
printf("> ");
i=1;
do {
lexCode = yylex(scanner);
/* snprintf(shell_prompt, sizeof(shell_prompt), "%s:%s $ ", getenv("USER"), getcwd(NULL, 1024));
Display prompt and read input (NB: input must be freed after use)...*/
text = strdup(yyget_text(scanner));
/*
input = readline(text);
if (!input)
break;
add_history(input);
free(input);*/
printf("lexcode %i Text %s\n", lexCode, text);
if (lexCode == 4) {
params[i++] = mystring;
if (strcmp(text, "\'\0")) {
params[i++] = mystring;
}
} else
if (lexCode != EOL) {
params[i++] = text;
printf("B%s\n", text);
}
Parse(shellParser, lexCode, text);
if (lexCode == EOL) {
dump_argv("Before exec_arguments", i, params);
exec_arguments(i, params);
corpse_collector();
Parse(shellParser, 0, NULL);
i=1;
}
} while (lexCode > 0);
if (-1 == lexCode) {
fprintf(stderr, "The scanner encountered an error.\n");
}
上面的代码具有解析和扫描功能,并注释掉了如果我同时想要两者都不起作用的 readline 功能。我可以让它工作吗?