boost spirit的簡單使用

2021-09-23 23:15:13 字數 843 閱讀 9771

嘗試通過cpp-netlib來做http伺服器,但是這個庫只能簡單的解析http結構,像cookie等結構,都要自己解析,了解到spirit可以通過類似bnf正規化格式定義字串格式並解析。

boost本身有個類似的例子,解析的是通過分號或者&符號分割的鍵值對字串,並放到對應的map中去。具體**可以參照這裡。所以基於這個**,簡單的進行修改之後,就能解析http cookie了。

首先,http cookie的格式,定義在rfc6265上。這裡定義了伺服器傳送給瀏覽器的set-cookie頭格式,和瀏覽器發給伺服器的cookie頭的bnf正規化。這裡定義的太複雜,解析的時候沒有考慮到這麼多字元(特別是排除一些控制字元),大致的**:

[cce lang=」cpp」]

namespace parser};}

[/cce]

這裡簡化了key和value,特別是value,只要是非分號的,都能解析到value中。使用也非常簡單:

[cce lang=」cpp」]

namespace qi = boost::spirit::qi;

parser::cooke_sequencep;

parser::pairs_type value;

if(qi::parse(c.begin(), c.end(), p, value))

}[/cce]

直接例項化cooe_sequence,將cookie字串傳入,就可以解析成map,然後再放入到自己的結構體中。這裡直接抄了示例中的**,所以直接使用了map,一般cookie沒必要排序,可以直接使用unordered_map,通過hash表存放。

boost spirit 的一些記錄

最近的工作跟 boost spirit 多一些,本來想整理乙個較為系統的筆記,不過感覺目前思路還比較凌亂,先隨便記錄一些。spirit 是 boost 中的乙個 ll解析器框架,他完成實現乙個 ebnf 語法解析器的功能,但它的輸入為c 語言。ll parser framework represen...

UICollectionView的簡單使用

所屬controller要遵循三個協議 uicollectionviewdatasource,uicollectionviewdelegate,uicollectionviewdelegateflowlayout uicollectionviewflowlayout flowlayout uicol...

BGAQRCode Android的簡單使用

compile com.google.zxing core 3.2.1 xmlns android 這句是使用選擇器框架時用到的 xmlns tools package com.huaqiang.zxingdemo 選擇框架用到 android name android.permission.cam...