我想了解將語義操作「附加」到解析器的準確含義,更準確地說,我想了解語義操作何時以及持續了多長時間解析器。以助推精神將語義操作附加到解析器
對於這一點,我稍微修改以下述方式升壓精神庫的employee.cpp例如:
1°/增加了一個函數print()
其輸出僅跟蹤時它被稱爲:
void print(const struct employee & e) { std::cout << e.surname << "\n"}
2°/在類employee_parser
的構造的端部,我結合的print()
功能到start
解析器:
employee_parser() : employee_parser::base_type(start)
{
using qi::int_;
using qi::lit;
using qi::double_;
using qi::lexeme;
using ascii::char_;
quoted_string %= lexeme['"' >> +(char_ - '"') >> '"'];
start %=
lit("employee")
>> '{'
>> int_ >> ','
>> quoted_string >> ','
>> quoted_string >> ','
>> double_
>> '}'
;
start[&print];
}
儘管我接到start
解析器的語義動作print
,如文檔中所述,但我始終不會調用print()
函數。它接近語義動作需要附加在解析器的右端側定義,解析器出現在相同的定義。任何人都可以詳細解釋一下嗎?
注意:我不是精神內部的專家,這正是我從閱讀文檔中學到並使用它的原因。如果有人能夠給我一個比我更深入的解釋,或者可以解決我的回答中的一些緊張情緒,我很樂意閱讀它。 –
對我來說這很清楚 – Heyji