|
是这样的,我要新增一条CLI命令,形如:
load scp {ip-addr} {file-path}
于是我在bison.y新增一条:
| SYM_LOAD SYM_SCP ip_addr filepath SEMI
{
LoadScp();
}
ip_addr定义如下:
ip_addr: e255 '.' e255 '.' e255 '.' e255
{
sprintf (string, "%d.%d.%d.%d", $1, $3, $5, $7);
$$ = string;
}
;
e255定义如下:
e255: expr
{
if (($1 >= 0) && ($1 <= 255))
$$=$1;
else
execerror(out_of_range, "must be 0...255");
};
当然,SYM_LOAD定义为 "load", SYM_SCP定义为"scp".filepath就是一个string类型.
编译没有问题.
但是运行时候,ip_addr 中4个数字为4,6,7,8,9时出错.如下:
> load scp 10.70.7.30 "asdfsaf"
*----------------^ 2
其中^是表示解析到何处失败的位置. 2是yyparse报出的错误类型. SYNTAX ERROR....
但是:
> load scp 10.70.5.30 "adfsafds"
load scp.........
10.70.5.30------adfsafds
没有问题.
而把7换成07则没有问题.
不知是何原因.我已经试过修改SYM_SCP的值,无效.
如果将ip_addr换成
ip_addr: NUMBER '.' NUMBER '.' NUMBER '.' NUMBER
{
sprintf (string, "%d.%d.%d.%d", $1, $3, $5, $7);
$$ = string;
}
;
仍然有上述问题,4个数字只要是4,6,7,8,9则解析失败,0,1,2,3,5没有问题.两位数三位数均没有问题.当然我没有挨个去实验...
去掉filepath变量仍有问题.
求高手解决啊....yyparse没看过,我看那玩意估计没一个礼拜拿不下来...
|
|