原始样本数据如下所示:
neg
test
-1.0 1.0
-2.1 3.45
我必须使用flex将其转换为可识别的ocaml输入列表,如下所示:
let test
=[
[ -1.0 ; 1.0 ; 1.0; -1.0 ];
[ -2.1 ; 3.45 ; 1.0; -1.0 ]
];;
我可以按如下方式转换它:
let test
=[
[ -1.0 ; 1.0 ; 1.0 ; ];
[ -2.1 ; 3.45 ; 1.0 ; ]
];;
我的主要问题是:
- 如果原始数据表示neg,如何将每个列表中的最后一个元素设为-1,如果原始数据表示pos,则如何设置为1?
醇>
答案 0 :(得分:0)
我认为您需要添加某种形式的解析。看看Bison,它与flex完美结合。所以你得到一些看起来像这样的规则。
let_expression: "neg" identifier vector_list
{
//Finalize by printing stored data and add -1
}
| identifier vector_list
{
//Finalize by printing stored data and add 1
}
vector_list: vector_list vector
{
//Store your number pairs in a std::vector<std::pair<T,T>>
}
| vector
{
//Initialize the vector list.
}
vector: const_num const_num
{
//Store your numbers, maybe in a std::pair
$$ = std::make_pair($1,$2)
}