C 如何消除lex代码输入字符串中的空格?

C 如何消除lex代码输入字符串中的空格?,c,compiler-construction,yacc,lex,C,Compiler Construction,Yacc,Lex,我正在用lex做一个正则表达式,以便在yacc接受算术表达式时使用它。如果表达式中有我尝试过的空格,但该空格没有被消除,并且我的yacc由于\s不是运算符而给出语法错误,则我希望消除该空格 LEX %{ #include <stdio.h> #include "y.tab.h" int yylval;/*declared extern by yacc code. used to pass info to yacc*/ %} letter [A-Za-z] digit

我正在用lex做一个正则表达式,以便在yacc接受算术表达式时使用它。如果表达式中有我尝试过的空格,但该空格没有被消除,并且我的yacc由于\s不是运算符而给出语法错误,则我希望消除该空格

LEX

%{
#include <stdio.h>
#include "y.tab.h"  
int yylval;/*declared extern by yacc code. used to pass info to yacc*/  
%}

letter  [A-Za-z]
digit   ([0-9])*
op      "+"|"*"|"("|")"|"/"|"-"
ws      [ \t\n\r\s]+$
other   .

%%

{ws}    { /*Nothing*/ }
{digit} { yylval = atoi(yytext); return NUM;}
{op}    { return yytext[0];}
{other} { return yytext[0];}

%%
%{
#包括
#包括“y.tab.h”
int yylval;/*由yacc代码声明为extern。用于将信息传递给yacc*/
%}
字母[A-Za-z]
数字([0-9])*
op“+”|“*”|“(“|”)”|“/“|”-”
ws[\t\n\r\s]+$
其他的。
%%
{ws}{/*无*/}
{digit}{yylval=atoi(yytext);返回NUM;}
{op}{return yytext[0];}
{other}{return yytext[0];}
%%

空格字符可以在字符类中表示为其本身。您的问题似乎是您的
{ws}
宏被锚定到了行的末尾。删除定义末尾的
$
,以及character类中的
\s
,它应该对您更有效。是的,这很有效谢谢@John我很感激。我不熟悉lexers&yacc,所以有点困惑。空格字符可以在字符类中表示为它自己。您的问题似乎是您的
{ws}
宏被锚定到了行的末尾。删除定义末尾的
$
,以及character类中的
\s
,它应该对您更有效。是的,这很有效谢谢@John我很感激。我是lexers&yacc的新手,所以有点困惑。