我想创建一个语法来解析包含空格分隔的浮点值和字符串值的行。保证最后一个值是 float ,并且可以用大括号括起来 {}
基本上我想将除字符串列表中的最后一个值和最后一个浮点值之外的所有值存储在一个单独的变量中。
我想解析几个例子:
example 1:
12 13 14
example 2
12 a b 15
example 3
12 13 14 {14}
我的语法是这样的:
list
:FloatStringList value
{
StoreList($1);
StoreLastValue($2);
}
FloatStringList
:FloatStringList FloatString
{
$1->push_back($2);
$$=$1;
}
|FloatString
{
$$=new ListOfString();
$$->push_back($1);
}
;
FloatString
:STRING
{
$$=$1;
}
|FLOAT
{
$$ = ConvertFloatToSring($1);
};
value
:FLOAT
{
$$ = $1;
}
如果最后一个值有大括号,它可以工作,但如果最后一个值没有括号,我如何区分值。 它还给出了减少/减少错误
最佳答案
你是对的,你需要递归。只需将列表的最后一个值视为它自己的不同类型。这是一个大致符合您目标的示例:
list: items lastValue {$1->pushBack($2);}
;
items: items value {$1->pushBack($2);}
| value {$$ = new List(); $$->pushBack($1);}
| /* empty */ {$$ = new List();}
;
lastValue: '{' float '}' { $$ = parseFloat($2); }
| float { $$ = parseFloat($1); }
;
value: float { ... }
| string { ... }
;
关于c++ - 如何区分浮点列表中的最后一个浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22066331/