void yyerror(char const *);
时间: 2024-05-27 15:09:44 浏览: 96
`yyerror` 是一个函数,用于在词法分析或语法分析过程中出现错误时打印错误信息。它的定义通常由词法分析器或语法分析器生成器(如Lex或Yacc)提供,因此需要与特定的工具一起使用。该函数的参数是一个指向常量字符的指针,指向包含错误信息的字符串。例如,如果在语法分析过程中遇到了未知的符号,则可以使用 `yyerror` 函数打印错误信息并停止解析。
相关问题
void yyerror(const char* msg) { printf("\033[1;31m%s at line %d\033[0m: %s\n",msg,yylineno,yytext); }将它改写成可变参数函数
可以将这个函数改写为可变参数函数,如下所示:
```c++
#include <stdarg.h>
void yyerror(const char* fmt, ...) {
va_list args;
va_start(args, fmt);
printf("\033[1;31m");
vprintf(fmt, args);
printf(" at line %d\033[0m: %s\n", yylineno, yytext);
va_end(args);
}
```
这里将参数`msg`替换为了格式字符串`fmt`,并使用`va_list`和`vprintf`函数处理可变参数。`va_start`宏用于初始化`va_list`指针,`vprintf`函数用于根据格式字符串和可变参数打印输出。最后使用`va_end`宏释放可变参数列表。
#include<stdarg.h> void yyerror(const char* fmt, ...) { has_syntacc_err = 1; va_list ap; va_start(ap, fmt); fprintf(stderr, "%s:%d", filename, yylloc.first_line); fprintf(stderr, "Grammar Error at Line %d Column %d: ", yylloc.first_line,yylloc.first_column); vfprintf(stderr, fmt, ap); fprintf(stderr, ".\n"); }
这是一段 C 语言代码,函数名为 yyerror,它的作用是在语法分析过程中发现错误时,输出错误信息。该函数使用了可变参数列表,第一个参数为错误信息的格式字符串,后面的参数为格式字符串中需要填充的值。函数内部通过 fprintf 将错误信息输出到标准错误流(stderr)中。同时,该函数将全局变量 has_syntacc_err 设为 1,表示语法分析过程中发现了错误。