gpt4 book ai didi

c++ - 没有空格的 Lex 解析

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:57 24 4
gpt4 key购买 nike

我正在使用 Lex、Yacc 和 C++ 编写自定义 shell。它在 Unix 环境中运行。只要 token 之间有空格,它目前就可以正常工作。例如:

ls | grep test > out

将通过:

WORD PIPE WORD WORD GREAT WORD

到 Yacc,然后从那里采取行动。但是,我也需要它在没有空格的情况下工作。例如:

ls|grep test>out

应该和前面的命令一样工作。但是,它目前仅通过:

WORD WORD

有没有办法在 Lex 标记输入之前解析输入?

编辑:

这是我的 Lex 文件:

%{

#include <string.h>
#include "y.tab.h"

%}

%%

\n {
return NEWLINE;
}

[ \t] {
/* Discard spaces and tabs */
}

">" { return GREAT; }

">&" { return GREATAMPERSAND; }

">>" { return GREATGREAT; }

">>&" { return GREATGREATAMPERSAND; }

"<" { return LESS; }

"|" { return PIPE; }

"&" { return AMPERSAND; }

[^ \t\n][^ \t\n]* {
/* Assume that file names have only alpha chars */
yylval.string_val = strdup(yytext);
return WORD;
}

. {
/* Invalid character in input */
return NOTOKEN;
}

%%

最佳答案

您需要更改您对WORD 的定义。现在,当它遇到一个字母字符时,它会将下一个空格之前的所有内容都视为该 WORD 的一部分。

您想更改它,使其不包含您用于其他目的的任何标点符号:

[^ \t\n\>\<\|\&]+  {
/* Assume that file names have only alpha chars */
yylval.string_val = strdup(yytext);
return WORD;
}

关于c++ - 没有空格的 Lex 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com