Bison 使用野牛时看到垃圾
我试图使用Bison进行编译(我不知道这是否是正确的词),但当我试图编译此源代码时:Bison 使用野牛时看到垃圾,bison,lex,Bison,Lex,我试图使用Bison进行编译(我不知道这是否是正确的词),但当我试图编译此源代码时: %{ #define YYSTYPE double #include <math.h> #include <stdio.h> %} %token NUM %% input: /* empty */ | input line ; line: '\n' | exp '\n' { printf ("\t%.10g\n", $1); } ; e
%{
#define YYSTYPE double
#include <math.h>
#include <stdio.h>
%}
%token NUM
%%
input: /* empty */
| input line
;
line: '\n'
| exp '\n' { printf ("\t%.10g\n", $1); }
;
exp: NUM { $$ = $1; }
| exp exp '+' { $$ = $1 + $2; }
| exp exp '-' { $$ = $1 - $2; }
| exp exp '*' { $$ = $1 * $2; }
| exp exp '/' { $$ = $1 / $2; }
/* Exponentiation */
| exp exp '^' { $$ = pow ($1, $2); }
/* Unary minus */
| exp 'n' { $$ = -$1; }
;
%%
/* Lexical analyzer returns a double floating point
number on the stack and the token NUM, or the ASCII
character read if not a number. Skips all blanks
and tabs, returns 0 for EOF. */
#include <ctype.h>
#include <stdio.h>
yyerror(const char *s)
yylex ()
{
int c;
/* skip white space */
while ((c = getchar ()) == ' ' || c == '\t')
;
/* process numbers */
if (c == '.' || isdigit (c))
{
ungetc (c, stdin);
scanf ("%lf", &yylval);
return NUM;
}
/* return end-of-file */
if (c == EOF)
return 0;
/* return single chars */
return c;
}
yyerror (s) /* Called by yyparse on error */
char *s;
{
printf ("%s\n", s);
}
main ()
{
yyparse ();
}
%{
#定义YYSTYPE双精度
#包括
#包括
%}
%令牌数
%%
输入:/*空*/
|输入线
;
行:'\n'
|exp'\n'{printf(“\t%.10g\n”,$1);}
;
exp:NUM{$$=$1;}
|exp exp'+'{$$=$1+$2;}
|exp exp'-'{$$=$1-$2;}
|exp exp'*'{$$=$1*$2;}
|exp exp'/'{$$=$1/$2;}
/*指数化*/
|exp exp'^'{$$=pow($1,$2);}
/*一元负号*/
|exp'n'{$$=-$1;}
;
%%
/*词法分析器返回一个双浮点
堆栈上的数字和标记NUM,或ASCII
如果不是数字,则读取字符。跳过所有空格
和制表符,返回0表示EOF*/
#包括
#包括
yyerror(常量字符*s)
yylex()
{
INTC;
/*跳过空白*/
而((c=getchar())=''|| c=='\t')
;
/*过程编号*/
如果(c='.| isdigit(c))
{
ungetc(c、stdin);
扫描频率(“%lf”、&yylval);
返回NUM;
}
/*返回文件结尾*/
如果(c==EOF)
返回0;
/*返回单字符*/
返回c;
}
yyerror/*在发生错误时由yyparse调用*/
char*s;
{
printf(“%s\n”,s);
}
主要()
{
yyparse();
}
我在控制台中收到一些“垃圾”(不是在文件或类似文件中),请看:
致以问候。这是m4输入文件或m4头。Bison和flex使用一个古老的unix宏处理器实用程序m4,这就是m4输入的样子。(我能够让m4-P在只有警告的情况下吃掉该文件。) 通常,这一切都是在幕后进行的,是看不见的。你似乎在windows上,在dos机箱外壳中。我猜您在某处有一个真正的bash控制台,可能是通过Cygwin,我建议您在完整的gnu环境中重试bison命令。它可能不会那么麻烦。Windows特别不擅长用流模拟标准输出,谁知道会发生什么
如果这没有直接帮助,请至少向我们提供有关您的环境的更多信息,请描述bison是如何构建或以其他方式安装的,并可能粘贴您正在使用的命令行。这是一个m4输入文件或m4头。Bison和flex使用一个古老的unix宏处理器实用程序m4,这就是m4输入的样子。(我能够让m4-P在只有警告的情况下吃掉该文件。) 通常,这一切都是在幕后进行的,是看不见的。你似乎在windows上,在dos机箱外壳中。我猜您在某处有一个真正的bash控制台,可能是通过Cygwin,我建议您在完整的gnu环境中重试bison命令。它可能不会那么麻烦。Windows特别不擅长用流模拟标准输出,谁知道会发生什么
如果这对我们没有直接帮助,请至少向我们提供有关您的环境的更多信息,请描述bison是如何构建或以其他方式安装的,并可能粘贴您正在使用的命令行。它看起来不像bison输出。您系统上的“bison”是否可能不是指向实际的bison,而是指向其他对象?我不知道,但这可能吗?NC:非常幸运的是,您用
D:\>
提示符粘贴了一行额外的内容。我所有的推理都是基于看到这4个字符的结果。:-)它看起来不像野牛的产出。您系统上的“bison”是否可能不是指向实际的bison,而是指向其他对象?我不知道,但这可能吗?NC:非常幸运的是,您用D:\>
提示符粘贴了一行额外的内容。我所有的推理都是基于看到这4个字符的结果。:-)