From: <tz...@us...> - 2011-11-06 16:13:06
|
Revision: 4474 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4474&view=rev Author: tzlaine Date: 2011-11-06 16:13:00 +0000 (Sun, 06 Nov 2011) Log Message: ----------- Changed default parser error reporting to log instead of print to stderr. Modified Paths: -------------- trunk/FreeOrion/parse/ReportParseError.cpp trunk/FreeOrion/parse/test/test.cpp Modified: trunk/FreeOrion/parse/ReportParseError.cpp =================================================================== --- trunk/FreeOrion/parse/ReportParseError.cpp 2011-11-06 16:03:42 UTC (rev 4473) +++ trunk/FreeOrion/parse/ReportParseError.cpp 2011-11-06 16:13:00 UTC (rev 4474) @@ -1,5 +1,7 @@ #include "ReportParseError.h" +#include "../util/AppInterface.h" + #include <boost/algorithm/string/classification.hpp> @@ -90,7 +92,7 @@ } void parse::detail::default_send_error_string(const std::string& str) -{ std::cerr << str; } +{ Logger().errorStream() << str; } const char* parse::detail::s_filename = 0; parse::text_iterator* parse::detail::s_text_it = 0; Modified: trunk/FreeOrion/parse/test/test.cpp =================================================================== --- trunk/FreeOrion/parse/test/test.cpp 2011-11-06 16:03:42 UTC (rev 4473) +++ trunk/FreeOrion/parse/test/test.cpp 2011-11-06 16:13:00 UTC (rev 4474) @@ -16,6 +16,9 @@ #include <fstream> +void send_error_string(const std::string& str) +{ std::cerr << str; } + void print_help() { std::cout << "Usage: test lexer|planet_size_enum_parser|planet_type_enum_parser|planet_environment_enum_parser|universe_object_type_enum_parser|star_type_enum_parser|non_ship_part_meter_type_enum_parser|set_non_ship_part_meter_type_enum_parser|set_ship_part_meter_type_enum_parser|empire_affiliation_type_enum_parser|unlockable_item_type_enum_parser|tech_type_enum_parser|ship_slot_type_enum_parser|ship_part_class_enum_parser|combat_fighter_type_enum_parser|capture_result_enum_parser|value_ref_statistic_type_enum_parser|int_value_ref_parser|double_value_ref_parser|string_value_ref_parser|planet_size_value_ref_parser|planet_type_value_ref_parser|planet_environment_value_ref_parser|universe_object_type_value_ref_parser|star_type_value_ref_parser|int_value_ref_evaluation|double_value_ref_evaluation|condition_parser|effect_parser|buildings_parser|specials_parser|species_parser|techs_parser|items_parser|ship_parts_parser|ship_hulls_parser|ship_designs_parser|fleet_plans_parser|monster_fleet_plans_parser|alignments_parser <-f filename>|<test string> --fail" << std::endl; @@ -23,6 +26,8 @@ int main(int argc, char* argv[]) { + parse::report_error_::send_error_string = &send_error_string; + if (argc < 3) { print_help(); exit(1); |
From: <tz...@us...> - 2011-11-07 04:22:17
|
Revision: 4477 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4477&view=rev Author: tzlaine Date: 2011-11-07 04:22:10 +0000 (Mon, 07 Nov 2011) Log Message: ----------- Broke up most of the file parsers into smaller rules to prevent bumping up against MSVC compiler limits. Modified Paths: -------------- trunk/FreeOrion/parse/BuildingsParser.cpp trunk/FreeOrion/parse/ShipDesignsParser.cpp trunk/FreeOrion/parse/ShipHullsParser.cpp trunk/FreeOrion/parse/ShipPartsParser.cpp trunk/FreeOrion/parse/SpecialsParser.cpp trunk/FreeOrion/parse/SpeciesParser.cpp trunk/FreeOrion/parse/TechsParser.cpp Modified: trunk/FreeOrion/parse/BuildingsParser.cpp =================================================================== --- trunk/FreeOrion/parse/BuildingsParser.cpp 2011-11-07 01:39:45 UTC (rev 4476) +++ trunk/FreeOrion/parse/BuildingsParser.cpp 2011-11-07 04:22:10 UTC (rev 4477) @@ -1,5 +1,3 @@ -#define FUSION_MAX_VECTOR_SIZE 20 - #include "Double.h" #include "Int.h" #include "Label.h" @@ -54,21 +52,32 @@ qi::_g_type _g; qi::_h_type _h; qi::_r1_type _r1; + qi::_r2_type _r2; qi::_val_type _val; qi::eps_type eps; using phoenix::new_; + building_prefix + = tok.BuildingType_ + > parse::label(Name_name) > tok.string [ _r1 = _1 ] + > parse::label(Description_name) > tok.string [ _r2 = _1 ] + ; + + cost + = parse::label(BuildCost_name) > parse::double_ [ _r1 = _1 ] + > parse::label(BuildTime_name) > parse::int_ [ _r2 = _1 ] + ; + + producible + = tok.Unproducible_ [ _val = false ] + | tok.Producible_ [ _val = true ] + | eps [ _val = true ] + ; + building_type - = tok.BuildingType_ - > parse::label(Name_name) > tok.string [ _a = _1 ] - > parse::label(Description_name) > tok.string [ _b = _1 ] - > parse::label(BuildCost_name) > parse::double_ [ _c = _1 ] - > parse::label(BuildTime_name) > parse::int_ [ _d = _1 ] - > ( - tok.Unproducible_ [ _e = false ] - | tok.Producible_ [ _e = true ] - | eps [ _e = true ] - ) + = building_prefix(_a, _b) + > cost(_c, _d) + > producible [ _e = _1 ] > parse::label(Location_name) > parse::detail::condition_parser [ _f = _1 ] > ( parse::label(CaptureResult_name) >> parse::enum_parser<CaptureResult>() [ _g = _1 ] @@ -82,9 +91,15 @@ = +building_type(_r1) ; + building_prefix.name("BuildingType"); + cost.name("cost"); + producible.name("Producible or Unproducible"); building_type.name("BuildingType"); #if DEBUG_PARSERS + debug(building_prefix); + debug(cost); + debug(producible); debug(building_type); #endif @@ -93,6 +108,24 @@ typedef boost::spirit::qi::rule< parse::token_iterator, + void (std::string&, std::string&), + parse::skipper_type + > building_prefix_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, + void (double&, int&), + parse::skipper_type + > cost_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, + bool (), + parse::skipper_type + > producible_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, void (std::map<std::string, BuildingType*>&), qi::locals< std::string, @@ -113,6 +146,9 @@ parse::skipper_type > start_rule; + building_prefix_rule building_prefix; + cost_rule cost; + producible_rule producible; building_type_rule building_type; start_rule start; }; Modified: trunk/FreeOrion/parse/ShipDesignsParser.cpp =================================================================== --- trunk/FreeOrion/parse/ShipDesignsParser.cpp 2011-11-07 01:39:45 UTC (rev 4476) +++ trunk/FreeOrion/parse/ShipDesignsParser.cpp 2011-11-07 04:22:10 UTC (rev 4477) @@ -1,5 +1,3 @@ -#define FUSION_MAX_VECTOR_SIZE 20 - #include "ParseImpl.h" #include "Label.h" @@ -48,14 +46,20 @@ qi::_d_type _d; qi::_e_type _e; qi::_r1_type _r1; + qi::_r2_type _r2; + qi::_r3_type _r3; using phoenix::new_; using phoenix::push_back; + design_prefix + = tok.ShipDesign_ + > parse::label(Name_name) > tok.string [ _r1 = _1 ] + > parse::label(Description_name) > tok.string [ _r2 = _1 ] + > parse::label(Hull_name) > tok.string [ _r3 = _1 ] + ; + design - = tok.ShipDesign_ - > parse::label(Name_name) > tok.string [ _a = _1 ] - > parse::label(Description_name) > tok.string [ _b = _1 ] - > parse::label(Hull_name) > tok.string [ _c = _1 ] + = design_prefix(_a, _b, _c) > parse::label(Parts_name) > ( '[' > +tok.string [ push_back(_d, _1) ] > ']' @@ -69,9 +73,11 @@ = +design(_r1) ; + design_prefix.name("ShipDesign"); design.name("ShipDesign"); #if DEBUG_PARSERS + debug(design_prefix); debug(design); #endif @@ -80,6 +86,12 @@ typedef boost::spirit::qi::rule< parse::token_iterator, + void (std::string&, std::string&, std::string&), + parse::skipper_type + > design_prefix_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, void (std::map<std::string, ShipDesign*>&), qi::locals< std::string, @@ -97,6 +109,7 @@ parse::skipper_type > start_rule; + design_prefix_rule design_prefix; design_rule design; start_rule start; }; Modified: trunk/FreeOrion/parse/ShipHullsParser.cpp =================================================================== --- trunk/FreeOrion/parse/ShipHullsParser.cpp 2011-11-07 01:39:45 UTC (rev 4476) +++ trunk/FreeOrion/parse/ShipHullsParser.cpp 2011-11-07 04:22:10 UTC (rev 4477) @@ -1,4 +1,3 @@ -#define FUSION_MAX_VECTOR_SIZE 20 #define PHOENIX_LIMIT 11 #include "Double.h" @@ -60,6 +59,7 @@ qi::_h_type _h; qi::_i_type _i; qi::_r1_type _r1; + qi::_r2_type _r2; qi::_val_type _val; qi::eps_type eps; qi::lit_type lit; @@ -67,17 +67,17 @@ using phoenix::new_; using phoenix::push_back; - slot - = tok.Slot_ - > parse::label(Type_name) > parse::enum_parser<ShipSlotType>() [ _a = _1 ] - > parse::label(Position_name) - > '(' - > parse::double_ [ _b = _1 ] - > ',' - > parse::double_ [ _c = _1 ] - > lit(')') [ _val = construct<HullType::Slot>(_a, _b, _c) ] + hull_prefix + = tok.Hull_ + > parse::label(Name_name) > tok.string [ _r1 = _1 ] + > parse::label(Description_name) > tok.string [ _r2 = _1 ] ; + cost + = parse::label(BuildCost_name) > parse::double_ [ _r1 = _1 ] + > parse::label(BuildTime_name) > parse::int_ [ _r2 = _1 ] + ; + hull_stats = parse::label(Speed_name) > parse::double_ [ _a = _1 ] > parse::label(StarlaneSpeed_name) > parse::double_ [ _b = _1 ] @@ -86,30 +86,41 @@ > parse::label(Structure_name) > parse::double_ [ _val = construct<HullTypeStats>(_a, _b, _c, _d, _1) ] ; + producible + = tok.Unproducible_ [ _val = false ] + | tok.Producible_ [ _val = true ] + | eps [ _val = true ] + ; + + slot + = tok.Slot_ + > parse::label(Type_name) > parse::enum_parser<ShipSlotType>() [ _a = _1 ] + > parse::label(Position_name) + > '(' > parse::double_ [ _b = _1 ] > ',' > parse::double_ [ _c = _1 ] > lit(')') + [ _val = construct<HullType::Slot>(_a, _b, _c) ] + ; + + slots + = parse::label(Slots_name) + >> ( + '[' > +slot [ push_back(_r1, _1) ] > ']' + | slot [ push_back(_r1, _1) ] + ) + ; + + location + = parse::label(Location_name) >> parse::detail::condition_parser [ _r1 = _1 ] + | eps [ _r1 = new_<Condition::All>() ] + ; + hull - = tok.Hull_ - > parse::label(Name_name) > tok.string [ _a = _1 ] - > parse::label(Description_name) > tok.string [ _b = _1 ] + = hull_prefix(_a, _b) > hull_stats [ _c = _1 ] - > parse::label(BuildCost_name) > parse::double_ [ _d = _1 ] - > parse::label(BuildTime_name) > parse::int_ [ _e = _1 ] - > ( - tok.Unproducible_ [ _f = false ] - | tok.Producible_ [ _f = true ] - | eps [ _f = true ] - ) + > cost(_d, _e) + > producible [ _f = _1 ] + > -slots(_g) + > location(_h) > -( - parse::label(Slots_name) - >> ( - '[' > +slot [ push_back(_g, _1) ] > ']' - | slot [ push_back(_g, _1) ] - ) - ) - > ( - parse::label(Location_name) >> parse::detail::condition_parser [ _h = _1 ] - | eps [ _h = new_<Condition::All>() ] - ) - > -( parse::label(EffectsGroups_name) >> parse::detail::effects_group_parser() [ _i = _1 ] ) > parse::label(Graphic_name) > tok.string [ insert(_r1, new_<HullType>(_a, _b, _c, _d, _e, _f, _g, _h, _i, _1)) ] @@ -119,13 +130,23 @@ = +hull(_r1) ; + hull_prefix.name("Hull"); + cost.name("build cost"); + hull_stats.name("Hull stats"); + producible.name("Producible or Unproducible"); slot.name("Slot"); - hull_stats.name("Hull stats"); + slots.name("Slots"); + location.name("Location"); hull.name("Hull"); #if DEBUG_PARSERS + debug(hull_prefix); + debug(cost); + debug(hull_stats); + debug(producible); debug(slot); - debug(hull_stats); + debug(slots); + debug(location); debug(hull); #endif @@ -134,17 +155,18 @@ typedef boost::spirit::qi::rule< parse::token_iterator, - HullType::Slot (), - qi::locals< - ShipSlotType, - double, - double - >, + void (std::string&, std::string&), parse::skipper_type - > slot_rule; + > hull_prefix_rule; typedef boost::spirit::qi::rule< parse::token_iterator, + void (double&, int&), + parse::skipper_type + > cost_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, HullTypeStats (), qi::locals< double, @@ -157,6 +179,35 @@ typedef boost::spirit::qi::rule< parse::token_iterator, + bool (), + parse::skipper_type + > producible_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, + HullType::Slot (), + qi::locals< + ShipSlotType, + double, + double + >, + parse::skipper_type + > slot_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, + void (std::vector<HullType::Slot>&), + parse::skipper_type + > slots_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, + void (Condition::ConditionBase*&), + parse::skipper_type + > location_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, void (std::map<std::string, HullType*>&), qi::locals< std::string, @@ -178,8 +229,13 @@ parse::skipper_type > start_rule; + hull_prefix_rule hull_prefix; + cost_rule cost; + hull_stats_rule hull_stats; + producible_rule producible; slot_rule slot; - hull_stats_rule hull_stats; + slots_rule slots; + location_rule location; hull_rule hull; start_rule start; }; Modified: trunk/FreeOrion/parse/ShipPartsParser.cpp =================================================================== --- trunk/FreeOrion/parse/ShipPartsParser.cpp 2011-11-07 01:39:45 UTC (rev 4476) +++ trunk/FreeOrion/parse/ShipPartsParser.cpp 2011-11-07 04:22:10 UTC (rev 4477) @@ -1,4 +1,3 @@ -#define FUSION_MAX_VECTOR_SIZE 20 #define PHOENIX_LIMIT 11 #include "Double.h" @@ -59,58 +58,88 @@ qi::_i_type _i; qi::_j_type _j; qi::_r1_type _r1; + qi::_r2_type _r2; + qi::_r3_type _r3; + qi::_r4_type _r4; + qi::_r5_type _r5; qi::_val_type _val; qi::eps_type eps; using phoenix::construct; using phoenix::new_; using phoenix::push_back; + fighter_stats_prefix + = parse::label(Type_name) >> parse::enum_parser<CombatFighterType>() [ _r1 = _1 ] + > parse::label(AntiShipDamage_name) > parse::double_ [ _r2 = _1 ] + > parse::label(AntiFighterDamage_name) > parse::double_ [ _r3 = _1 ] + > parse::label(LaunchRate_name) > parse::double_ [ _r4 = _1 ] + > parse::label(FighterWeaponRange_name) > parse::double_ [ _r5 = _1 ] + ; + + fighter_stats + = fighter_stats_prefix(_a, _b, _c, _d, _e) + > parse::label(Speed_name) > parse::double_ [ _f = _1 ] + > parse::label(Stealth_name) > parse::double_ [ _g = _1 ] + > parse::label(Structure_name) > parse::double_ [ _h = _1 ] + > parse::label(Detection_name) > parse::double_ [ _i = _1 ] + > parse::label(Capacity_name) > parse::int_ [ _val = construct<FighterStats>(_a, _b, _c, _d, _e, _f, _g, _h, _i, _1) ] + ; + + lr_df_stats_prefix + = parse::label(Damage_name) >> parse::double_ [ _r1 = _1 ] + > parse::label(ROF_name) > parse::double_ [ _r2 = _1 ] + > parse::label(Range_name) > parse::double_ [ _r3 = _1 ] + ; + + lr_df_stats + = lr_df_stats_prefix(_b, _c, _d) + >> ( + parse::label(Speed_name) >> parse::double_ [ _e = _1 ] + > parse::label(Stealth_name) > parse::double_ [ _f = _1 ] + > parse::label(Structure_name) > parse::double_ [ _g = _1 ] + > parse::label(Capacity_name) > parse::int_ [ _val = construct<LRStats>(_b, _c, _d, _e, _f, _g, _1) ] + | eps [ _val = construct<DirectFireStats>(_b, _c, _d) ] + ) + ; + part_stats - = ( - parse::label(Type_name) >> parse::enum_parser<CombatFighterType>() [ _a = _1 ] - > parse::label(AntiShipDamage_name) > parse::double_ [ _b = _1 ] - > parse::label(AntiFighterDamage_name) > parse::double_ [ _c = _1 ] - > parse::label(LaunchRate_name) > parse::double_ [ _d = _1 ] - > parse::label(FighterWeaponRange_name) > parse::double_ [ _e = _1 ] - > parse::label(Speed_name) > parse::double_ [ _f = _1 ] - > parse::label(Stealth_name) > parse::double_ [ _g = _1 ] - > parse::label(Structure_name) > parse::double_ [ _h = _1 ] - > parse::label(Detection_name) > parse::double_ [ _i = _1 ] - > parse::label(Capacity_name) > parse::int_ [ _val = construct<FighterStats>(_a, _b, _c, _d, _e, _f, _g, _h, _i, _1) ] - ) - | ( - parse::label(Damage_name) >> parse::double_ [ _b = _1 ] - > parse::label(ROF_name) > parse::double_ [ _c = _1 ] - > parse::label(Range_name) > parse::double_ [ _d = _1 ] - >> ( - parse::label(Speed_name) >> parse::double_ [ _e = _1 ] - > parse::label(Stealth_name) > parse::double_ [ _f = _1 ] - > parse::label(Structure_name) > parse::double_ [ _g = _1 ] - > parse::label(Capacity_name) > parse::int_ [ _val = construct<LRStats>(_b, _c, _d, _e, _f, _g, _1) ] - | eps [ _val = construct<DirectFireStats>(_b, _c, _d) ] - ) - ) + = fighter_stats [ _val = _1 ] + | lr_df_stats [ _val = _1 ] | parse::label(Capacity_name) > parse::double_ [ _val = _1 ] ; - part_type + part_type_prefix = tok.Part_ - > parse::label(Name_name) > tok.string [ _a = _1 ] - > parse::label(Description_name) > tok.string [ _b = _1 ] - > parse::label(Class_name) > parse::enum_parser<ShipPartClass>() [ _c = _1 ] - >> part_stats [ _d = _1 ] - > parse::label(BuildCost_name) > parse::double_ [ _e = _1 ] - > parse::label(BuildTime_name) > parse::int_ [ _f = _1 ] + > parse::label(Name_name) > tok.string [ _r1 = _1 ] + > parse::label(Description_name) > tok.string [ _r2 = _1 ] + > parse::label(Class_name) > parse::enum_parser<ShipPartClass>() [ _r3 = _1 ] + ; + + cost + = parse::label(BuildCost_name) > parse::double_ [ _r1 = _1 ] + > parse::label(BuildTime_name) > parse::int_ [ _r2 = _1 ] + ; + + producible + = tok.Unproducible_ [ _val = false ] + | tok.Producible_ [ _val = true ] + | eps [ _val = true ] + ; + + slots + = parse::label(MountableSlotTypes_name) >> ( - tok.Unproducible_ [ _g = false ] - | tok.Producible_ [ _g = true ] - | eps [ _g = true ] + '[' > +parse::enum_parser<ShipSlotType>() [ push_back(_r1, _1) ] > ']' + | parse::enum_parser<ShipSlotType>() [ push_back(_r1, _1) ] ) - > parse::label(MountableSlotTypes_name) - >> ( - '[' > +parse::enum_parser<ShipSlotType>() [ push_back(_h, _1) ] > ']' - | parse::enum_parser<ShipSlotType>() [ push_back(_h, _1) ] - ) + ; + + part_type + = part_type_prefix(_a, _b, _c) + >> part_stats [ _d = _1 ] + > cost(_e, _f) + >> producible [ _g = _1 ] + > slots(_h) > parse::label(Location_name) > parse::detail::condition_parser [ _i = _1 ] >> -( parse::label(EffectsGroups_name) @@ -123,11 +152,27 @@ = +part_type(_r1) ; + fighter_stats_prefix.name("fighter stats"); + fighter_stats.name("fighter stats"); + lr_df_stats_prefix.name("LR or DF stats"); + lr_df_stats.name("LR or DF stats"); part_stats.name("Part stats"); + part_type_prefix.name("Part"); + cost.name("cost"); + producible.name("Producible or Unproducible"); + slots.name("mountable slot types"); part_type.name("Part"); #if DEBUG_PARSERS + debug(fighter_stats_prefix); + debug(fighter_stats); + debug(lr_df_stats_prefix); + debug(lr_df_stats); debug(part_stats); + debug(part_type_prefix); + debug(cost); + debug(producible); + debug(slots); debug(part_type); #endif @@ -136,6 +181,18 @@ typedef boost::spirit::qi::rule< parse::token_iterator, + void (CombatFighterType&, double&, double&, double&, double&), + parse::skipper_type + > fighter_stats_prefix_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, + void (double&, double&, double&), + parse::skipper_type + > lr_df_stats_prefix_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, PartTypeStats (), qi::locals< CombatFighterType, @@ -153,6 +210,30 @@ typedef boost::spirit::qi::rule< parse::token_iterator, + void (std::string&, std::string&, ShipPartClass&), + parse::skipper_type + > part_type_prefix_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, + void (double&, int&), + parse::skipper_type + > cost_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, + bool (), + parse::skipper_type + > producible_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, + void (std::vector<ShipSlotType>&), + parse::skipper_type + > slots_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, void (std::map<std::string, PartType*>&), qi::locals< std::string, @@ -175,7 +256,15 @@ parse::skipper_type > start_rule; + fighter_stats_prefix_rule fighter_stats_prefix; + part_stats_rule fighter_stats; + lr_df_stats_prefix_rule lr_df_stats_prefix; + part_stats_rule lr_df_stats; part_stats_rule part_stats; + part_type_prefix_rule part_type_prefix; + cost_rule cost; + producible_rule producible; + slots_rule slots; part_type_rule part_type; start_rule start; }; Modified: trunk/FreeOrion/parse/SpecialsParser.cpp =================================================================== --- trunk/FreeOrion/parse/SpecialsParser.cpp 2011-11-07 01:39:45 UTC (rev 4476) +++ trunk/FreeOrion/parse/SpecialsParser.cpp 2011-11-07 04:22:10 UTC (rev 4477) @@ -1,5 +1,3 @@ -#define FUSION_MAX_VECTOR_SIZE 20 - #include "Double.h" #include "Int.h" #include "Label.h" @@ -53,22 +51,31 @@ qi::_f_type _f; qi::_g_type _g; qi::_r1_type _r1; + qi::_r2_type _r2; qi::_val_type _val; qi::eps_type eps; using phoenix::new_; - special + special_prefix = tok.Special_ - > parse::label(Name_name) > tok.string [ _a = _1 ] - > parse::label(Description_name) > tok.string [ _b = _1 ] - > ( - parse::label(SpawnRate_name) >> parse::double_ [ _c = _1 ] - | eps [ _c = 1.0 ] + > parse::label(Name_name) > tok.string [ _r1 = _1 ] + > parse::label(Description_name) > tok.string [ _r2 = _1 ] + ; + + spawn + = ( + parse::label(SpawnRate_name) >> parse::double_ [ _r1 = _1 ] + | eps [ _r1 = 1.0 ] ) > ( - parse::label(SpawnLimit_name) >> parse::int_ [ _d = _1 ] - | eps [ _d = 9999 ] + parse::label(SpawnLimit_name) >> parse::int_ [ _r2 = _1 ] + | eps [ _r2 = 9999 ] ) + ; + + special + = special_prefix(_a, _b) + > spawn(_c, _d) > -( parse::label(Location_name) >> parse::detail::condition_parser [ _e = _1 ] ) @@ -82,9 +89,13 @@ = +special(_r1) ; + special_prefix.name("Special"); special.name("Special"); + spawn.name("SpawnRate and SpawnLimit"); #if DEBUG_PARSERS + debug(special_prefix); + debug(spawn); debug(special); #endif @@ -93,6 +104,18 @@ typedef boost::spirit::qi::rule< parse::token_iterator, + void (std::string&, std::string&), + parse::skipper_type + > special_prefix_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, + void (double&, int&), + parse::skipper_type + > spawn_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, void (std::map<std::string, Special*>&), qi::locals< std::string, @@ -111,6 +134,9 @@ parse::skipper_type > start_rule; + + special_prefix_rule special_prefix; + spawn_rule spawn; special_rule special; start_rule start; }; Modified: trunk/FreeOrion/parse/SpeciesParser.cpp =================================================================== --- trunk/FreeOrion/parse/SpeciesParser.cpp 2011-11-07 01:39:45 UTC (rev 4476) +++ trunk/FreeOrion/parse/SpeciesParser.cpp 2011-11-07 04:22:10 UTC (rev 4477) @@ -1,5 +1,3 @@ -#define FUSION_MAX_VECTOR_SIZE 20 - #include "ParseImpl.h" #include "Label.h" #include "../universe/Species.h" @@ -71,6 +69,18 @@ > parse::label(Graphic_name) > tok.string [ _val = construct<FocusType>(_a, _b, _c, _1) ] ; + foci + = parse::label(Foci_name) + >> ( + '[' > +focus_type [ push_back(_r1, _1) ] > ']' + | focus_type [ push_back(_r1, _1) ] + ) + ; + + effects + = parse::label(EffectsGroups_name) >> parse::detail::effects_group_parser() [ _r1 = _1 ] + ; + environment_map_element = parse::label(Type_name) >> parse::enum_parser<PlanetType>() [ _a = _1 ] > parse::label(Environment_name) > parse::enum_parser<PlanetEnvironment>() @@ -82,6 +92,10 @@ | environment_map_element [ insert(_val, _1) ] ; + environments + = parse::label(Environments_name) >> environment_map [ _r1 = _1 ] + ; + species = tok.Species_ > parse::label(Name_name) > tok.string [ _a = _1 ] @@ -89,21 +103,9 @@ > -tok.Playable_ [ _c = true ] > -tok.CanProduceShips_ [ _d = true ] > -tok.CanColonize_ [ _e = true ] - > -( - parse::label(Foci_name) - >> ( - '[' > +focus_type [ push_back(_f, _1) ] > ']' - | focus_type [ push_back(_f, _1) ] - ) - ) - > -( - parse::label(EffectsGroups_name) - >> parse::detail::effects_group_parser() [ _g = _1 ] - ) - > -( - parse::label(Environments_name) - >> environment_map [ _h = _1 ] - ) + > -foci(_f) + > -effects(_g) + > -environments(_h) > parse::label(Graphic_name) > tok.string [ insert_species(_r1, new_<Species>(_a, _b, _f, _h, _g, _c, _d, _e, _1)) ] ; @@ -112,15 +114,21 @@ ; focus_type.name("Focus"); + foci.name("Foci"); + effects.name("EffectsGroups"); environment_map_element.name("Type = <type> Environment = <env>"); environment_map.name("Environments"); + environments.name("Environments"); species.name("Species"); start.name("start"); #if DEBUG_PARSERS debug(focus_type); + debug(foci); + debug(effects); debug(environment_map_element); debug(environment_map); + debug(environments); debug(species); debug(start); #endif @@ -141,6 +149,18 @@ typedef boost::spirit::qi::rule< parse::token_iterator, + void (std::vector<FocusType>&), + parse::skipper_type + > foci_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, + void (std::vector<boost::shared_ptr<const Effect::EffectsGroup> >&), + parse::skipper_type + > effects_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, std::pair<PlanetType, PlanetEnvironment> (), qi::locals<PlanetType>, parse::skipper_type @@ -154,6 +174,12 @@ typedef boost::spirit::qi::rule< parse::token_iterator, + void (std::map<PlanetType, PlanetEnvironment>&), + parse::skipper_type + > environments_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, void (std::map<std::string, Species*>&), qi::locals< std::string, @@ -174,9 +200,12 @@ parse::skipper_type > start_rule; + foci_rule foci; focus_type_rule focus_type; + effects_rule effects; environment_map_element_rule environment_map_element; environment_map_rule environment_map; + environments_rule environments; species_rule species; start_rule start; }; Modified: trunk/FreeOrion/parse/TechsParser.cpp =================================================================== --- trunk/FreeOrion/parse/TechsParser.cpp 2011-11-07 01:39:45 UTC (rev 4476) +++ trunk/FreeOrion/parse/TechsParser.cpp 2011-11-07 04:22:10 UTC (rev 4477) @@ -1,5 +1,3 @@ -#define FUSION_MAX_VECTOR_SIZE 20 - #include "Double.h" #include "Int.h" #include "Label.h" @@ -81,7 +79,8 @@ qi::_g_type _g; qi::_h_type _h; qi::_r1_type _r1; - qi::_r1_type _r2; + qi::_r2_type _r2; + qi::_r3_type _r3; qi::_val_type _val; qi::eps_type eps; using phoenix::construct; @@ -89,10 +88,14 @@ using phoenix::new_; using phoenix::push_back; + tech_info_name_desc + = parse::label(Name_name) > tok.string [ _r1 = _1 ] + > parse::label(Description_name) > tok.string [ _r2 = _1 ] + > parse::label(Short_Description_name) > tok.string [ _r3 = _1 ] // TODO: Get rid of underscore. + ; + tech_info - = parse::label(Name_name) > tok.string [ _a = _1 ] - > parse::label(Description_name) > tok.string [ _b = _1 ] - > parse::label(Short_Description_name) > tok.string [ _c = _1 ] // TODO: Get rid of underscore. + = tech_info_name_desc(_a, _b, _c) >> -( parse::label(TechType_name) >> parse::enum_parser<TechType>() [ _d = _1 ] | eps [ _d = TT_THEORY ] @@ -114,28 +117,32 @@ [ _val = construct<Tech::TechInfo>(_a, _b, _c, _e, _d, _f, _g, _h) ] ; + prerequisites + = parse::label(Prerequisites_name) + >> ( + '[' > +tok.string [ insert(_r1, _1) ] > ']' + | tok.string [ insert(_r1, _1) ] + ) + ; + + unlocks + = parse::label(Unlock_name) + >> ( + '[' > +parse::detail::item_spec_parser() [ push_back(_r1, _1) ] > ']' + | parse::detail::item_spec_parser() [ push_back(_r1, _1) ] + ) + ; + tech = ( tok.Tech_ - > tech_info [ _a = _1 ] - > -( - parse::label(Prerequisites_name) - >> ( - '[' > +tok.string [ insert(_b, _1) ] > ']' - | tok.string [ insert(_b, _1) ] - ) - ) - > -( - parse::label(Unlock_name) - >> ( - '[' > +parse::detail::item_spec_parser() [ push_back(_c, _1) ] > ']' - | parse::detail::item_spec_parser() [ push_back(_c, _1) ] - ) - ) - > -( + > tech_info [ _a = _1 ] + > -prerequisites(_b) + > -unlocks(_c) + > -( parse::label(EffectsGroups_name) >> parse::detail::effects_group_parser() [ _d = _1 ] ) - > -( + > -( parse::label(Graphic_name) >> tok.string [ _e = _1 ] ) ) @@ -156,16 +163,21 @@ ) ; + tech_info_name_desc.name("tech name"); tech_info.name("Tech info"); + prerequisites.name("Prerequisites"); + unlocks.name("Unlock"); tech.name("Tech"); category.name("Category"); start.name("start"); #if DEBUG_PARSERS + debug(tech_info_name_desc); debug(tech_info); + debug(prerequisites); + debug(unlocks); debug(tech); debug(category); - debug(start); #endif qi::on_error<qi::fail>(start, parse::report_error(_1, _2, _3, _4)); @@ -173,6 +185,12 @@ typedef boost::spirit::qi::rule< parse::token_iterator, + Tech::TechInfo (std::string&, std::string&, std::string&), + parse::skipper_type + > tech_info_name_desc_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, Tech::TechInfo (), qi::locals< std::string, @@ -189,6 +207,18 @@ typedef boost::spirit::qi::rule< parse::token_iterator, + Tech::TechInfo (std::set<std::string>&), + parse::skipper_type + > prerequisites_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, + Tech::TechInfo (std::vector<ItemSpec>&), + parse::skipper_type + > unlocks_rule; + + typedef boost::spirit::qi::rule< + parse::token_iterator, void (TechManager::TechContainer&), qi::locals< Tech::TechInfo, @@ -216,7 +246,10 @@ parse::skipper_type > start_rule; + tech_info_name_desc_rule tech_info_name_desc; tech_info_rule tech_info; + prerequisites_rule prerequisites; + unlocks_rule unlocks; tech_rule tech; category_rule category; start_rule start; |
From: <geo...@us...> - 2011-12-16 22:45:31
|
Revision: 4521 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4521&view=rev Author: geoffthemedio Date: 2011-12-16 22:45:25 +0000 (Fri, 16 Dec 2011) Log Message: ----------- Grooming Modified Paths: -------------- trunk/FreeOrion/parse/Parse.cpp trunk/FreeOrion/parse/TechsParser.cpp Modified: trunk/FreeOrion/parse/Parse.cpp =================================================================== --- trunk/FreeOrion/parse/Parse.cpp 2011-12-16 22:43:39 UTC (rev 4520) +++ trunk/FreeOrion/parse/Parse.cpp 2011-12-16 22:45:25 UTC (rev 4521) @@ -101,7 +101,7 @@ using phoenix::if_; channel - = tok.int_ [ _val = _1, _pass = 0 < _1 && _1 <= 255 ] + = tok.int_ [ _val = _1, _pass = 0 <= _1 && _1 <= 255 ] ; start @@ -109,9 +109,9 @@ > ',' > channel [ _b = _1 ] > ',' > channel [ _c = _1 ] >> ( - ',' > channel [ construct<GG::Clr>(_a, _b, _c, _1) ] - | eps [ construct<GG::Clr>(_a, _b, _c, 255) ] - ) + ',' > channel [ construct<GG::Clr>(_a, _b, _c, _1) ] + | eps [ construct<GG::Clr>(_a, _b, _c, phoenix::val(255)) ] + ) > ')' ; Modified: trunk/FreeOrion/parse/TechsParser.cpp =================================================================== --- trunk/FreeOrion/parse/TechsParser.cpp 2011-12-16 22:43:39 UTC (rev 4520) +++ trunk/FreeOrion/parse/TechsParser.cpp 2011-12-16 22:45:25 UTC (rev 4521) @@ -29,18 +29,18 @@ { typedef void type; }; void operator()(TechManager::TechContainer& techs, Tech* tech) const - { - g_categories_seen->insert(tech->Category()); - if (techs.get<TechManager::NameIndex>().find(tech->Name()) != techs.get<TechManager::NameIndex>().end()) { - std::string error_str = "ERROR: More than one tech in techs.txt has the name " + tech->Name(); - throw std::runtime_error(error_str.c_str()); - } - if (tech->Prerequisites().find(tech->Name()) != tech->Prerequisites().end()) { - std::string error_str = "ERROR: Tech " + tech->Name() + " depends on itself!"; - throw std::runtime_error(error_str.c_str()); - } - techs.insert(tech); + { + g_categories_seen->insert(tech->Category()); + if (techs.get<TechManager::NameIndex>().find(tech->Name()) != techs.get<TechManager::NameIndex>().end()) { + std::string error_str = "ERROR: More than one tech in techs.txt has the name " + tech->Name(); + throw std::runtime_error(error_str.c_str()); } + if (tech->Prerequisites().find(tech->Name()) != tech->Prerequisites().end()) { + std::string error_str = "ERROR: Tech " + tech->Name() + " depends on itself!"; + throw std::runtime_error(error_str.c_str()); + } + techs.insert(tech); + } }; const boost::phoenix::function<insert_tech_> insert_tech; @@ -51,137 +51,137 @@ { typedef void type; }; void operator()(std::map<std::string, TechCategory*>& categories, TechCategory* category) const - { - if (!categories.insert(std::make_pair(category->name, category)).second) { - std::string error_str = "ERROR: More than one tech category in techs.txt name " + category->name; - throw std::runtime_error(error_str.c_str()); - } + { + if (!categories.insert(std::make_pair(category->name, category)).second) { + std::string error_str = "ERROR: More than one tech category in techs.txt name " + category->name; + throw std::runtime_error(error_str.c_str()); } + } }; const boost::phoenix::function<insert_category_> insert_category; struct rules { rules() - { - const parse::lexer& tok = parse::lexer::instance(); + { + const parse::lexer& tok = parse::lexer::instance(); - qi::_1_type _1; - qi::_2_type _2; - qi::_3_type _3; - qi::_4_type _4; - qi::_a_type _a; - qi::_b_type _b; - qi::_c_type _c; - qi::_d_type _d; - qi::_e_type _e; - qi::_f_type _f; - qi::_g_type _g; - qi::_h_type _h; - qi::_r1_type _r1; - qi::_r2_type _r2; - qi::_r3_type _r3; - qi::_val_type _val; - qi::eps_type eps; - using phoenix::construct; - using phoenix::insert; - using phoenix::new_; - using phoenix::push_back; + qi::_1_type _1; + qi::_2_type _2; + qi::_3_type _3; + qi::_4_type _4; + qi::_a_type _a; + qi::_b_type _b; + qi::_c_type _c; + qi::_d_type _d; + qi::_e_type _e; + qi::_f_type _f; + qi::_g_type _g; + qi::_h_type _h; + qi::_r1_type _r1; + qi::_r2_type _r2; + qi::_r3_type _r3; + qi::_val_type _val; + qi::eps_type eps; + using phoenix::construct; + using phoenix::insert; + using phoenix::new_; + using phoenix::push_back; - tech_info_name_desc - = parse::label(Name_name) > tok.string [ _r1 = _1 ] - > parse::label(Description_name) > tok.string [ _r2 = _1 ] - > parse::label(Short_Description_name) > tok.string [ _r3 = _1 ] // TODO: Get rid of underscore. - ; + tech_info_name_desc + = parse::label(Name_name) > tok.string [ _r1 = _1 ] + > parse::label(Description_name) > tok.string [ _r2 = _1 ] + > parse::label(Short_Description_name) > tok.string [ _r3 = _1 ] // TODO: Get rid of underscore. + ; - tech_info - = tech_info_name_desc(_a, _b, _c) - >> -( - parse::label(TechType_name) >> parse::enum_parser<TechType>() [ _d = _1 ] - | eps [ _d = TT_THEORY ] - ) - > parse::label(Category_name) > tok.string [ _e = _1 ] - >> ( - parse::label(ResearchCost_name) >> parse::double_ [ _f = _1 ] - | eps [ _f = 1.0 ] - ) - >> ( - parse::label(ResearchTurns_name) >> parse::int_ [ _g = _1 ] - | eps [ _g = 1 ] - ) - >> ( - tok.Unresearchable_ [ _h = false ] - | tok.Researchable_ [ _h = true ] - | eps [ _h = true ] - ) - [ _val = construct<Tech::TechInfo>(_a, _b, _c, _e, _d, _f, _g, _h) ] - ; + tech_info + = tech_info_name_desc(_a, _b, _c) + >> -( + parse::label(TechType_name) >> parse::enum_parser<TechType>() [ _d = _1 ] + | eps [ _d = TT_THEORY ] + ) + > parse::label(Category_name) > tok.string [ _e = _1 ] + >> ( + parse::label(ResearchCost_name) >> parse::double_ [ _f = _1 ] + | eps [ _f = 1.0 ] + ) + >> ( + parse::label(ResearchTurns_name) >> parse::int_ [ _g = _1 ] + | eps [ _g = 1 ] + ) + >> ( + tok.Unresearchable_ [ _h = false ] + | tok.Researchable_ [ _h = true ] + | eps [ _h = true ] + ) + [ _val = construct<Tech::TechInfo>(_a, _b, _c, _e, _d, _f, _g, _h) ] + ; - prerequisites - = parse::label(Prerequisites_name) - >> ( - '[' > +tok.string [ insert(_r1, _1) ] > ']' - | tok.string [ insert(_r1, _1) ] - ) - ; + prerequisites + = parse::label(Prerequisites_name) + >> ( + '[' > +tok.string [ insert(_r1, _1) ] > ']' + | tok.string [ insert(_r1, _1) ] + ) + ; - unlocks - = parse::label(Unlock_name) - >> ( - '[' > +parse::detail::item_spec_parser() [ push_back(_r1, _1) ] > ']' - | parse::detail::item_spec_parser() [ push_back(_r1, _1) ] - ) - ; + unlocks + = parse::label(Unlock_name) + >> ( + '[' > +parse::detail::item_spec_parser() [ push_back(_r1, _1) ] > ']' + | parse::detail::item_spec_parser() [ push_back(_r1, _1) ] + ) + ; - tech - = ( - tok.Tech_ - > tech_info [ _a = _1 ] - > -prerequisites(_b) - > -unlocks(_c) - > -( - parse::label(EffectsGroups_name) >> parse::detail::effects_group_parser() [ _d = _1 ] - ) - > -( - parse::label(Graphic_name) >> tok.string [ _e = _1 ] - ) - ) - [ insert_tech(_r1, new_<Tech>(_a, _d, _b, _c, _e)) ] - ; + tech + = ( + tok.Tech_ + > tech_info [ _a = _1 ] + > -prerequisites(_b) + > -unlocks(_c) + > -( + parse::label(EffectsGroups_name) >> parse::detail::effects_group_parser() [ _d = _1 ] + ) + > -( + parse::label(Graphic_name) >> tok.string [ _e = _1 ] + ) + ) + [ insert_tech(_r1, new_<Tech>(_a, _d, _b, _c, _e)) ] + ; - category - = tok.Category_ - > parse::label(Name_name) > tok.string [ _a = _1 ] - > parse::label(Graphic_name) > tok.string [ _b = _1 ] - > parse::label(Colour_name) > parse::detail::color_parser() [ insert_category(_r1, new_<TechCategory>(_a, _b, _1)) ] - ; + category + = tok.Category_ + > parse::label(Name_name) > tok.string [ _a = _1 ] + > parse::label(Graphic_name) > tok.string [ _b = _1 ] + > parse::label(Colour_name) > parse::detail::color_parser() [ insert_category(_r1, new_<TechCategory>(_a, _b, _1)) ] + ; - start - = +( - tech(_r1) - | category(phoenix::ref(*g_categories)) // TODO: Using _r2 here as I would like to do seems to give GCC 4.6 fits. - ) - ; + start + = +( + tech(_r1) + | category(phoenix::ref(*g_categories)) // TODO: Using _r2 here as I would like to do seems to give GCC 4.6 fits. + ) + ; - tech_info_name_desc.name("tech name"); - tech_info.name("Tech info"); - prerequisites.name("Prerequisites"); - unlocks.name("Unlock"); - tech.name("Tech"); - category.name("Category"); - start.name("start"); + tech_info_name_desc.name("tech name"); + tech_info.name("Tech info"); + prerequisites.name("Prerequisites"); + unlocks.name("Unlock"); + tech.name("Tech"); + category.name("Category"); + start.name("start"); #if DEBUG_PARSERS - debug(tech_info_name_desc); - debug(tech_info); - debug(prerequisites); - debug(unlocks); - debug(tech); - debug(category); + debug(tech_info_name_desc); + debug(tech_info); + debug(prerequisites); + debug(unlocks); + debug(tech); + debug(category); #endif - qi::on_error<qi::fail>(start, parse::report_error(_1, _2, _3, _4)); - } + qi::on_error<qi::fail>(start, parse::report_error(_1, _2, _3, _4)); + } typedef boost::spirit::qi::rule< parse::token_iterator, @@ -254,11 +254,9 @@ category_rule category; start_rule start; }; - } namespace parse { - bool techs(const boost::filesystem::path& path, TechManager::TechContainer& techs_, std::map<std::string, TechCategory*>& categories, @@ -268,5 +266,4 @@ g_categories = &categories; return detail::parse_file<rules, TechManager::TechContainer>(path, techs_); } - } |
From: <tz...@us...> - 2011-12-19 13:45:00
|
Revision: 4522 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4522&view=rev Author: tzlaine Date: 2011-12-19 13:44:49 +0000 (Mon, 19 Dec 2011) Log Message: ----------- Fixed Boost 1.48.0 build error. Modified Paths: -------------- trunk/FreeOrion/parse/ShipHullsParser.cpp trunk/FreeOrion/parse/ShipPartsParser.cpp Modified: trunk/FreeOrion/parse/ShipHullsParser.cpp =================================================================== --- trunk/FreeOrion/parse/ShipHullsParser.cpp 2011-12-16 22:45:25 UTC (rev 4521) +++ trunk/FreeOrion/parse/ShipHullsParser.cpp 2011-12-19 13:44:49 UTC (rev 4522) @@ -1,4 +1,5 @@ #define PHOENIX_LIMIT 11 +#define BOOST_RESULT_OF_NUM_ARGS PHOENIX_LIMIT #include "Double.h" #include "EnumParser.h" Modified: trunk/FreeOrion/parse/ShipPartsParser.cpp =================================================================== --- trunk/FreeOrion/parse/ShipPartsParser.cpp 2011-12-16 22:45:25 UTC (rev 4521) +++ trunk/FreeOrion/parse/ShipPartsParser.cpp 2011-12-19 13:44:49 UTC (rev 4522) @@ -1,4 +1,5 @@ #define PHOENIX_LIMIT 11 +#define BOOST_RESULT_OF_NUM_ARGS PHOENIX_LIMIT #include "Double.h" #include "EnumParser.h" |
From: <geo...@us...> - 2011-12-27 07:04:12
|
Revision: 4543 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4543&view=rev Author: geoffthemedio Date: 2011-12-27 07:04:06 +0000 (Tue, 27 Dec 2011) Log Message: ----------- minor grooming Modified Paths: -------------- trunk/FreeOrion/parse/AlignmentsParser.cpp trunk/FreeOrion/parse/BuildingsParser.cpp Modified: trunk/FreeOrion/parse/AlignmentsParser.cpp =================================================================== --- trunk/FreeOrion/parse/AlignmentsParser.cpp 2011-12-27 00:19:06 UTC (rev 4542) +++ trunk/FreeOrion/parse/AlignmentsParser.cpp 2011-12-27 07:04:06 UTC (rev 4543) @@ -82,7 +82,6 @@ } namespace parse { - bool alignments(const boost::filesystem::path& path, std::vector<Alignment>& alignments_, std::vector<boost::shared_ptr<const Effect::EffectsGroup> >& effects_groups) @@ -90,5 +89,4 @@ g_effects_groups = &effects_groups; return detail::parse_file<rules, std::vector<Alignment> >(path, alignments_); } - } Modified: trunk/FreeOrion/parse/BuildingsParser.cpp =================================================================== --- trunk/FreeOrion/parse/BuildingsParser.cpp 2011-12-27 00:19:06 UTC (rev 4542) +++ trunk/FreeOrion/parse/BuildingsParser.cpp 2011-12-27 07:04:06 UTC (rev 4543) @@ -151,12 +151,9 @@ building_type_rule building_type; start_rule start; }; - } namespace parse { - bool buildings(const boost::filesystem::path& path, std::map<std::string, BuildingType*>& building_types) { return detail::parse_file<rules, std::map<std::string, BuildingType*> >(path, building_types); } - } |
From: <geo...@us...> - 2012-02-16 17:51:04
|
Revision: 4652 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4652&view=rev Author: geoffthemedio Date: 2012-02-16 17:50:54 +0000 (Thu, 16 Feb 2012) Log Message: ----------- Prep work for macro substitution in content scripting files. Modified Paths: -------------- trunk/FreeOrion/parse/Parse.cpp trunk/FreeOrion/parse/Parse.h Modified: trunk/FreeOrion/parse/Parse.cpp =================================================================== --- trunk/FreeOrion/parse/Parse.cpp 2012-02-16 17:50:13 UTC (rev 4651) +++ trunk/FreeOrion/parse/Parse.cpp 2012-02-16 17:50:54 UTC (rev 4652) @@ -7,6 +7,8 @@ #include "ValueRefParser.h" #include "../universe/Effect.h" +#include <boost/xpressive/xpressive.hpp> +#include <boost/algorithm/string/replace.hpp> #define DEBUG_PARSERS 0 @@ -190,6 +192,102 @@ condition_parser(); } + void macro_substitution(std::string& text) { + using namespace boost::xpressive; + + const sregex MACRO_KEY = +_w; + const sregex MACRO_TEXT = -*_; + const sregex MACRO_DEFINITION = (s1 = MACRO_KEY) >> _n >> "'''" >> (s2 = MACRO_TEXT) >> "'''" >> _n; + const sregex MACRO_INSERTION = "[[" >> *space >> (s1 = MACRO_KEY) >> *space >> "]]"; + + std::map<std::string, std::string> macros; + + // parse input text + try { + std::string::iterator text_it = text.begin(); + while (true) { + // find next macro definition + smatch match; + if (!regex_search(text_it, text.end(), match, MACRO_DEFINITION, regex_constants::match_continuous)) + break; + text_it = text.end() - match.suffix().length(); + + // get macro key and macro text from match + const std::string& macro_key = match[1].str(); + assert(macro_key != ""); + const std::string& macro_text = match[2].str(); + assert(macro_text != ""); + + // store macro + if (macros.find(macro_key) == macros.end()) { + macros[macro_key] = macro_text; + } else { + Logger().errorStream() << "Duplicate macro key foud: " << macro_key << ". Ignoring duplicate."; + } + } + } catch (std::exception& e) { + Logger().errorStream() << "Exception caught regex parsing script file: " << e.what(); + std::cerr << "Exception caught regex parsing script file: " << e.what() << std::endl; + return; + } + + // recursively expand macro keys: replace [[MACRO_KEY]] in any macro text + // with the macro text corresponding to MACRO_KEY. + //for (std::map<std::string, std::string>::iterator macro_it = macros.begin(); + // macro_it != macros.end(); ++macro_it) + //{ + // std::size_t position = 0; // position in the definition string, past the already processed part + // smatch match; + // std::set<std::string> cyclic_reference_check; + // cyclic_reference_check.insert(macro_it->first); + // while (regex_search(map_it->second.begin() + position, macro_it->second.end(), match, MACRO_INSERTION)) { + // position += match.position(); + // if (cyclic_reference_check.find(match[1]) == cyclic_reference_check.end()) { + // cyclic_reference_check.insert(match[1]); + // std::map<std::string, std::string>::iterator map_lookup_it = m_strings.find(match[1]); + // if (map_lookup_it != m_strings.end()) { + // const std::string substitution = map_lookup_it->second; + // map_it->second.replace(position, match.length(), substitution); + // // replace recursively -- do not skip past substitution + // } else { + // Logger().errorStream() << "Unresolved key expansion: " << match[1] << "."; + // position += match.length(); + // } + // } else { + // Logger().errorStream() << "Cyclic key expansion: " << match[1] << "."; + // position += match.length(); + // } + // } + //} + + // substitute macro keys - replace [[MACRO_KEY]] in the input text with + // the macro text corresponding to MACRO_KEY + try { + std::size_t position = 0; // position in the definition string, past the already processed part + smatch match; + while (regex_search(text.begin() + position, text.end(), match, MACRO_INSERTION)) { + position += match.position(); + const std::string& matched_text = match.str(); // [[MACRO_KEY]] + const std::string& macro_key = match[1].str(); // just MACRO_KEY + // look up macro key to insert + std::map<std::string, std::string>::iterator macro_lookup_it = macros.find(macro_key); + if (macro_lookup_it != macros.end()) { + // insert + const std::string& replacement_text = macro_lookup_it->second; + text.replace(position, matched_text.length(), replacement_text); + position += replacement_text.length(); + } else { + Logger().errorStream() << "Unresolved macro reference: " << macro_key; + position += match.length(); + } + } + } catch (const std::exception& e) { + Logger().errorStream() << "Exception caught regex parsing script file: " << e.what(); + std::cerr << "Exception caught regex parsing script file: " << e.what() << std::endl; + return; + } + } + namespace detail { effects_group_rule& effects_group_parser() { static effects_group_rules rules; Modified: trunk/FreeOrion/parse/Parse.h =================================================================== --- trunk/FreeOrion/parse/Parse.h 2012-02-16 17:50:13 UTC (rev 4651) +++ trunk/FreeOrion/parse/Parse.h 2012-02-16 17:50:54 UTC (rev 4652) @@ -18,9 +18,10 @@ class Species; namespace parse { - void init(); + void macro_substitution(std::string& text); + bool buildings(const boost::filesystem::path& path, std::map<std::string, BuildingType*>& building_types); bool specials(const boost::filesystem::path& path, std::map<std::string, Special*>& specials_); @@ -48,6 +49,7 @@ std::vector<Alignment>& alignments_, std::vector<boost::shared_ptr<const Effect::EffectsGroup> >& effects_groups); + bool named_effects(const boost::filesystem::path& path, std::map<std::string, Effect::EffectsGroup*>& effects_groups); } #endif |
From: <geo...@us...> - 2012-02-16 19:08:01
|
Revision: 4653 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4653&view=rev Author: geoffthemedio Date: 2012-02-16 19:07:51 +0000 (Thu, 16 Feb 2012) Log Message: ----------- Moved macro substitution code out of header file since it's only used at file scope. Modified Paths: -------------- trunk/FreeOrion/parse/Parse.cpp trunk/FreeOrion/parse/Parse.h Modified: trunk/FreeOrion/parse/Parse.cpp =================================================================== --- trunk/FreeOrion/parse/Parse.cpp 2012-02-16 17:50:54 UTC (rev 4652) +++ trunk/FreeOrion/parse/Parse.cpp 2012-02-16 19:07:51 UTC (rev 4653) @@ -304,12 +304,9 @@ return rules.start; } - void parse_file_common(const boost::filesystem::path& path, - const parse::lexer& l, - std::string& filename, - std::string& file_contents, - parse::text_iterator& first, - parse::token_iterator& it) + void parse_file_common(const boost::filesystem::path& path, const parse::lexer& l, + std::string& filename, std::string& file_contents, + parse::text_iterator& first, parse::token_iterator& it) { filename = path.string(); @@ -323,6 +320,8 @@ } } + macro_substitution(file_contents); + first = parse::text_iterator(file_contents.begin()); parse::text_iterator last(file_contents.end()); Modified: trunk/FreeOrion/parse/Parse.h =================================================================== --- trunk/FreeOrion/parse/Parse.h 2012-02-16 17:50:54 UTC (rev 4652) +++ trunk/FreeOrion/parse/Parse.h 2012-02-16 19:07:51 UTC (rev 4653) @@ -20,8 +20,6 @@ namespace parse { void init(); - void macro_substitution(std::string& text); - bool buildings(const boost::filesystem::path& path, std::map<std::string, BuildingType*>& building_types); bool specials(const boost::filesystem::path& path, std::map<std::string, Special*>& specials_); |
From: <geo...@us...> - 2012-03-04 04:15:54
|
Revision: 4678 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4678&view=rev Author: geoffthemedio Date: 2012-03-04 04:15:48 +0000 (Sun, 04 Mar 2012) Log Message: ----------- Grooming Modified Paths: -------------- trunk/FreeOrion/parse/ConditionParser1.cpp trunk/FreeOrion/parse/DoubleValueRefParser.cpp trunk/FreeOrion/parse/IntValueRefParser.cpp trunk/FreeOrion/parse/TechsParser.cpp Modified: trunk/FreeOrion/parse/ConditionParser1.cpp =================================================================== --- trunk/FreeOrion/parse/ConditionParser1.cpp 2012-03-04 04:15:05 UTC (rev 4677) +++ trunk/FreeOrion/parse/ConditionParser1.cpp 2012-03-04 04:15:48 UTC (rev 4678) @@ -26,10 +26,8 @@ #endif namespace { - struct condition_parser_rules_1 - { - condition_parser_rules_1() - { + struct condition_parser_rules_1 { + condition_parser_rules_1() { const parse::lexer& tok = parse::lexer::instance(); const parse::value_ref_parser_rule<int>::type& int_value_ref = @@ -108,18 +106,18 @@ >> -( parse::label(Affiliation_name) >> parse::enum_parser<EmpireAffiliationType>() [ _a = _1 ] | eps [ _a = AFFIL_SELF ] - ) + ) >> ( parse::label(Empire_name) >> int_value_ref [ _val = new_<Condition::EmpireAffiliation>(_1, _a) ] | eps [ _val = new_<Condition::EmpireAffiliation>(_a) ] - ) + ) ; homeworld = ( tok.Homeworld_ >> parse::label(Name_name) >> string_ref_vec [ _val = new_<Condition::Homeworld>(_1) ] - ) + ) | tok.Homeworld_ [ _val = new_<Condition::Homeworld>() ] ; @@ -129,8 +127,8 @@ >> -( parse::label(Name_name) >> string_ref_vec [ _a = _1 ] ) - ) - [ _val = new_<Condition::Building>(_a) ] + ) + [ _val = new_<Condition::Building>(_a) ] ; species @@ -138,7 +136,7 @@ >> ( parse::label(Name_name) >> string_ref_vec [ _val = new_<Condition::Species>(_1) ] | eps [ _val = new_<Condition::Species>() ] // TODO: Is this as useless as it looks? - ) + ) ; focus_type @@ -146,7 +144,7 @@ >> ( parse::label(Type_name) >> string_ref_vec [ _val = new_<Condition::FocusType>(_1) ] | eps [ _val = new_<Condition::FocusType>(std::vector<const ValueRef::ValueRefBase<std::string>*>()) ] - ) + ) ; planet_type @@ -155,8 +153,8 @@ >> ( '[' >> +planet_type_value_ref [ push_back(_a, _1) ] > ']' | planet_type_value_ref [ push_back(_a, _1) ] - ) - [ _val = new_<Condition::PlanetType>(_a) ] + ) + [ _val = new_<Condition::PlanetType>(_a) ] ; planet_size @@ -165,8 +163,8 @@ >> ( '[' >> +planet_size_value_ref [ push_back(_a, _1) ] > ']' | planet_size_value_ref [ push_back(_a, _1) ] - ) - [ _val = new_<Condition::PlanetSize>(_a) ] + ) + [ _val = new_<Condition::PlanetSize>(_a) ] ; planet_environment @@ -175,8 +173,8 @@ >> ( '[' > +planet_environment_value_ref [ push_back(_a, _1) ] > ']' | planet_environment_value_ref [ push_back(_a, _1) ] - ) - [ _val = new_<Condition::PlanetEnvironment>(_a) ] + ) + [ _val = new_<Condition::PlanetEnvironment>(_a) ] ; object_type @@ -184,7 +182,7 @@ | ( tok.ObjectType_ > parse::label(Type_name) > universe_object_type_value_ref [ _val = new_<Condition::Type>(_1) ] - ) + ) ; meter_value @@ -196,8 +194,8 @@ >> -( parse::label(High_name) >> double_value_ref [ _c = _1 ] ) - ) - [ _val = new_<Condition::MeterValue>(_a, _b, _c) ] + ) + [ _val = new_<Condition::MeterValue>(_a, _b, _c) ] ; and_ Modified: trunk/FreeOrion/parse/DoubleValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2012-03-04 04:15:05 UTC (rev 4677) +++ trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2012-03-04 04:15:48 UTC (rev 4678) @@ -7,10 +7,8 @@ namespace { - struct double_parser_rules - { - double_parser_rules() - { + struct double_parser_rules { + double_parser_rules() { qi::_1_type _1; qi::_a_type _a; qi::_val_type _val; @@ -75,11 +73,11 @@ | int_var_final_token() [ push_back(_a, _1), _val = new_<ValueRef::StaticCast<int, double> >(new_<ValueRef::Variable<int> >(_a)) ] ) - ) + ) | ( tok.CurrentTurn_ [ push_back(_a, _1), _val = new_<ValueRef::StaticCast<int, double> >(new_<ValueRef::Variable<int> >(_a)) ] | tok.Value_ [ push_back(_a, _1), _val = new_<ValueRef::Variable<double> >(_a) ] - ) + ) ; initialize_numeric_statistic_parser<double>(statistic, final_token); @@ -133,24 +131,22 @@ typedef multiplicative_expr_rule<double>::type multiplicative_expression_rule; typedef additive_expr_rule<double>::type additive_expression_rule; - name_token_rule final_token; - rule constant; - variable_rule variable; - statistic_rule statistic; - rule int_statistic; - rule negate_expr; - multiplicative_expression_rule multiplicative_expr; - additive_expression_rule additive_expr; - rule expr; - rule primary_expr; + name_token_rule final_token; + rule constant; + variable_rule variable; + statistic_rule statistic; + rule int_statistic; + rule negate_expr; + multiplicative_expression_rule multiplicative_expr; + additive_expression_rule additive_expr; + rule expr; + rule primary_expr; }; - double_parser_rules& get_double_parser_rules() - { + double_parser_rules& get_double_parser_rules() { static double_parser_rules retval; return retval; } - } const name_token_rule& double_var_final_token() @@ -159,10 +155,8 @@ const statistic_rule<double>::type& double_var_statistic() { return get_double_parser_rules().statistic; } -namespace parse { - +namespace parse { template <> value_ref_parser_rule<double>::type& value_ref_parser<double>() { return get_double_parser_rules().expr; } - } Modified: trunk/FreeOrion/parse/IntValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/IntValueRefParser.cpp 2012-03-04 04:15:05 UTC (rev 4677) +++ trunk/FreeOrion/parse/IntValueRefParser.cpp 2012-03-04 04:15:48 UTC (rev 4678) @@ -125,15 +125,15 @@ typedef multiplicative_expr_rule<int>::type multiplicative_expression_rule; typedef additive_expr_rule<int>::type additive_expression_rule; - name_token_rule final_token; - rule constant; - variable_rule variable; - statistic_rule statistic; - rule negate_expr; - multiplicative_expression_rule multiplicative_expr; - additive_expression_rule additive_expr; - rule expr; - rule primary_expr; + name_token_rule final_token; + rule constant; + variable_rule variable; + statistic_rule statistic; + rule negate_expr; + multiplicative_expression_rule multiplicative_expr; + additive_expression_rule additive_expr; + rule expr; + rule primary_expr; }; int_parser_rules& get_int_parser_rules() { Modified: trunk/FreeOrion/parse/TechsParser.cpp =================================================================== --- trunk/FreeOrion/parse/TechsParser.cpp 2012-03-04 04:15:05 UTC (rev 4677) +++ trunk/FreeOrion/parse/TechsParser.cpp 2012-03-04 04:15:48 UTC (rev 4678) @@ -22,14 +22,12 @@ std::set<std::string>* g_categories_seen = 0; std::map<std::string, TechCategory*>* g_categories = 0; - struct insert_tech_ - { + struct insert_tech_ { template <typename Arg1, typename Arg2> struct result { typedef void type; }; - void operator()(TechManager::TechContainer& techs, Tech* tech) const - { + void operator()(TechManager::TechContainer& techs, Tech* tech) const { g_categories_seen->insert(tech->Category()); if (techs.get<TechManager::NameIndex>().find(tech->Name()) != techs.get<TechManager::NameIndex>().end()) { std::string error_str = "ERROR: More than one tech in techs.txt has the name " + tech->Name(); @@ -44,14 +42,12 @@ }; const boost::phoenix::function<insert_tech_> insert_tech; - struct insert_category_ - { + struct insert_category_ { template <typename Arg1, typename Arg2> struct result { typedef void type; }; - void operator()(std::map<std::string, TechCategory*>& categories, TechCategory* category) const - { + void operator()(std::map<std::string, TechCategory*>& categories, TechCategory* category) const { if (!categories.insert(std::make_pair(category->name, category)).second) { std::string error_str = "ERROR: More than one tech category in techs.txt name " + category->name; throw std::runtime_error(error_str.c_str()); @@ -60,10 +56,8 @@ }; const boost::phoenix::function<insert_category_> insert_category; - struct rules - { - rules() - { + struct rules { + rules() { const parse::lexer& tok = parse::lexer::instance(); qi::_1_type _1; @@ -246,13 +240,13 @@ parse::skipper_type > start_rule; - tech_info_name_desc_rule tech_info_name_desc; - tech_info_rule tech_info; - prerequisites_rule prerequisites; - unlocks_rule unlocks; - tech_rule tech; - category_rule category; - start_rule start; + tech_info_name_desc_rule tech_info_name_desc; + tech_info_rule tech_info; + prerequisites_rule prerequisites; + unlocks_rule unlocks; + tech_rule tech; + category_rule category; + start_rule start; }; } |
From: <geo...@us...> - 2012-03-04 12:19:38
|
Revision: 4679 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4679&view=rev Author: geoffthemedio Date: 2012-03-04 12:19:32 +0000 (Sun, 04 Mar 2012) Log Message: ----------- Grooming Modified Paths: -------------- trunk/FreeOrion/parse/ConditionParser2.cpp trunk/FreeOrion/parse/ConditionParser3.cpp Modified: trunk/FreeOrion/parse/ConditionParser2.cpp =================================================================== --- trunk/FreeOrion/parse/ConditionParser2.cpp 2012-03-04 04:15:48 UTC (rev 4678) +++ trunk/FreeOrion/parse/ConditionParser2.cpp 2012-03-04 12:19:32 UTC (rev 4679) @@ -15,14 +15,11 @@ namespace { - struct condition_parser_rules_2 - { - condition_parser_rules_2() - { + struct condition_parser_rules_2 { + condition_parser_rules_2() { const parse::lexer& tok = parse::lexer::instance(); - const parse::value_ref_parser_rule<int>::type& int_value_ref = - parse::value_ref_parser<int>(); + const parse::value_ref_parser_rule<int>::type& int_value_ref = parse::value_ref_parser<int>(); qi::_1_type _1; qi::_2_type _2; @@ -49,8 +46,8 @@ >> -( parse::label(High_name) >> int_value_ref [ _c = _1 ] ) - ) - [ _val = new_<Condition::HasSpecial>(_a, _b, _c) ] + ) + [ _val = new_<Condition::HasSpecial>(_a, _b, _c) ] ; owner_has_tech Modified: trunk/FreeOrion/parse/ConditionParser3.cpp =================================================================== --- trunk/FreeOrion/parse/ConditionParser3.cpp 2012-03-04 04:15:48 UTC (rev 4678) +++ trunk/FreeOrion/parse/ConditionParser3.cpp 2012-03-04 12:19:32 UTC (rev 4679) @@ -20,21 +20,14 @@ #endif namespace { - struct condition_parser_rules_3 - { - condition_parser_rules_3() - { + struct condition_parser_rules_3 { + condition_parser_rules_3() { const parse::lexer& tok = parse::lexer::instance(); - const parse::value_ref_parser_rule<int>::type& int_value_ref = - parse::value_ref_parser<int>(); + const parse::value_ref_parser_rule<int>::type& int_value_ref = parse::value_ref_parser<int>(); + const parse::value_ref_parser_rule<double>::type& double_value_ref = parse::value_ref_parser<double>(); + const parse::value_ref_parser_rule< ::StarType>::type& star_type_value_ref= parse::value_ref_parser< ::StarType>(); - const parse::value_ref_parser_rule<double>::type& double_value_ref = - parse::value_ref_parser<double>(); - - const parse::value_ref_parser_rule< ::StarType>::type& star_type_value_ref = - parse::value_ref_parser< ::StarType>(); - qi::_1_type _1; qi::_2_type _2; qi::_3_type _3; @@ -63,55 +56,55 @@ = tok.Number_ >> -( parse::label(Low_name) >> int_value_ref [ _a = _1 ] - ) + ) >> -( parse::label(High_name) >> int_value_ref [ _b = _1 ] - ) + ) > parse::label(Condition_name) > parse::detail::condition_parser [ _val = new_<Condition::Number>(_a, _b, _1) ] ; turn = ( - tok.Turn_ + tok.Turn_ >> -( parse::label(Low_name) >> int_value_ref [ _a = _1 ] ) >> -( parse::label(High_name) >> int_value_ref [ _b = _1 ] ) - ) - [ _val = new_<Condition::Turn>(_a, _b) ] + ) + [ _val = new_<Condition::Turn>(_a, _b) ] ; created_on_turn = ( - tok.CreatedOnTurn_ + tok.CreatedOnTurn_ >> -( parse::label(Low_name) >> int_value_ref [ _a = _1 ] ) >> -( parse::label(High_name) >> int_value_ref [ _b = _1 ] ) - ) - [ _val = new_<Condition::CreatedOnTurn>(_a, _b) ] + ) + [ _val = new_<Condition::CreatedOnTurn>(_a, _b) ] ; number_of = ( - tok.NumberOf_ + tok.NumberOf_ > parse::label(Number_name) > int_value_ref [ _a = _1 ] > parse::label(Condition_name) > parse::detail::condition_parser [ _val = new_<Condition::SortedNumberOf>(_a, _1) ] ) | ( - ( + ( tok.MaximumNumberOf_ [ _b = Condition::SORT_MAX ] | tok.MinimumNumberOf_ [ _b = Condition::SORT_MIN ] | tok.ModeNumberOf_ [ _b = Condition::SORT_MODE ] - ) + ) > parse::label(Number_name) > int_value_ref [ _a = _1 ] > parse::label(SortKey_name) > double_value_ref [ _c = _1 ] > parse::label(Condition_name) > parse::detail::condition_parser [ _val = new_<Condition::SortedNumberOf>(_a, _c, _b, _1) ] - ) + ) ; contains @@ -130,8 +123,8 @@ >> ( '[' > +star_type_value_ref [ push_back(_a, _1) ] > ']' | star_type_value_ref [ push_back(_a, _1) ] - ) - [ _val = new_<Condition::StarType>(_a) ] + ) + [ _val = new_<Condition::StarType>(_a) ] ; random @@ -144,7 +137,7 @@ tok.OwnerFoodStockpile_ [ _a = RE_FOOD ] | tok.OwnerMineralStockpile_ [ _a = RE_MINERALS ] | tok.OwnerTradeStockpile_ [ _a = RE_TRADE ] - ) + ) > parse::label(Low_name) > double_value_ref [ _b = _1 ] > parse::label(High_name) > double_value_ref [ _val = new_<Condition::EmpireStockpileValue>(_a, _b, _1) ] ; |
From: <geo...@us...> - 2012-03-25 21:06:30
|
Revision: 4746 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4746&view=rev Author: geoffthemedio Date: 2012-03-25 21:06:23 +0000 (Sun, 25 Mar 2012) Log Message: ----------- Added preceding and following lines around log error output of parsing problem indication of location in parsed file. Modified Paths: -------------- trunk/FreeOrion/parse/ReportParseError.cpp trunk/FreeOrion/parse/ReportParseError.h Modified: trunk/FreeOrion/parse/ReportParseError.cpp =================================================================== --- trunk/FreeOrion/parse/ReportParseError.cpp 2012-03-24 21:23:26 UTC (rev 4745) +++ trunk/FreeOrion/parse/ReportParseError.cpp 2012-03-25 21:06:23 UTC (rev 4746) @@ -11,14 +11,12 @@ m_indent(indent) {} -void parse::detail::info_visitor::indent() const -{ +void parse::detail::info_visitor::indent() const { if (m_indent) m_os << std::string(m_indent, ' '); } -std::string parse::detail::info_visitor::prepare(const string& s) const -{ +std::string parse::detail::info_visitor::prepare(const string& s) const { std::string str = s; if (str == parse::lexer::bool_regex) str = "boolean (true or false)"; @@ -36,14 +34,12 @@ void parse::detail::info_visitor::print(const string& str) const { m_os << prepare(str); } -void parse::detail::info_visitor::operator()(boost::spirit::info::nil) const -{ +void parse::detail::info_visitor::operator()(boost::spirit::info::nil) const { indent(); print(m_tag); } -void parse::detail::info_visitor::operator()(const string& str) const -{ +void parse::detail::info_visitor::operator()(const string& str) const { indent(); print(str); } @@ -51,8 +47,7 @@ void parse::detail::info_visitor::operator()(const boost::spirit::info& what) const { boost::apply_visitor(info_visitor(m_os, what.tag, m_indent), what.value); } -void parse::detail::info_visitor::operator()(const std::pair<boost::spirit::info, boost::spirit::info>& pair) const -{ +void parse::detail::info_visitor::operator()(const std::pair<boost::spirit::info, boost::spirit::info>& pair) const { const boost::spirit::info* infos = &pair.first; multi_info(infos, infos + 2); } @@ -61,7 +56,7 @@ { multi_info(l.begin(), l.end()); } template <typename Iter> -void parse::detail::info_visitor::multi_info(Iter first, const Iter last) const +void parse::detail::info_visitor::multi_info(Iter first, const Iter last) const { if (m_tag == "sequence" || m_tag == "expect") { if (first->tag.find(" =") == first->tag.size() - 2) @@ -85,8 +80,7 @@ } } -void parse::detail::pretty_print(std::ostream& os, boost::spirit::info const& what) -{ +void parse::detail::pretty_print(std::ostream& os, boost::spirit::info const& what) { info_visitor v(os, what.tag, 1); boost::apply_visitor(v, what.value); } @@ -102,43 +96,136 @@ boost::function<void (const std::string&)> parse::report_error_::send_error_string = &detail::default_send_error_string; -std::pair<parse::text_iterator, unsigned int> parse::report_error_::line_start_and_line_number(text_iterator error_position) const -{ - unsigned int line = 1; - text_iterator it = detail::s_begin; - text_iterator line_start = detail::s_begin; - while (it != error_position) { - bool eol = false; - if (it != error_position && *it == '\r') { - eol = true; - line_start = ++it; +namespace { + std::vector<parse::text_iterator> LineStarts() { + //Logger().debugStream() << "line starts start"; + using namespace parse; + + std::vector<text_iterator> retval; + + text_iterator it = detail::s_begin; + retval.push_back(it); // first line + + // find subsequent lines + while (it != detail::s_end) { + bool eol = false; + text_iterator temp; + + // if line-ending char is found, store iterator to point after it + if (*it == '\r') { + eol = true; + temp = ++it; + } + if (it != detail::s_end && *it == '\n') { + eol = true; + temp = ++it; + } + + if (eol && temp != detail::s_end) + retval.push_back(temp); + else if (it != detail::s_end) + ++it; } - if (it != error_position && *it == '\n') { - eol = true; - line_start = ++it; + + //Logger().debugStream() << "line starts end. num lines: " << retval.size(); + //for (unsigned int i = 0; i < retval.size(); ++i) { + // text_iterator line_end = retval[i]; + // while (line_end != detail::s_end && *line_end != '\r' && *line_end != '\n') + // ++line_end; + // Logger().debugStream() << " line " << i+1 << ": " << std::string(retval[i], line_end); + //} + return retval; + } +} + +std::pair<parse::text_iterator, unsigned int> parse::report_error_::line_start_and_line_number(text_iterator error_position) const { + //Logger().debugStream() << "line_start_and_line_number start ... looking for: " << std::string(error_position, error_position + 20); + if (error_position == detail::s_begin) + return std::make_pair(detail::s_begin, 1); + + std::vector<parse::text_iterator> line_starts = LineStarts(); + + // search for the first line where the iterator to the start of the line is + // at or past the error position + for (unsigned int index = 0; index < line_starts.size(); ++index) { + if (std::distance(line_starts[index], error_position) < 0 && index > 0) { + //Logger().debugStream() << "line_start_and_line_number early end"; + return std::make_pair(line_starts[index-1], index); // return start of previous line, which contained the error_position text } - if (eol) - ++line; - else - ++it; + //Logger().debugStream() << "line: " << index + 1 << " distance: " << std::distance(line_starts[index], error_position) << " : " << get_line(line_starts[index]); } - return std::pair<text_iterator, unsigned int>(line_start, line); + + //Logger().debugStream() << "line_start_and_line_number end"; + return std::make_pair(detail::s_begin, 1); } -std::string parse::report_error_::get_line(text_iterator line_start) const -{ +std::string parse::report_error_::get_line(text_iterator line_start) const { text_iterator line_end = line_start; - while (line_end != detail::s_end && *line_end != '\r' && *line_end != '\n') { + while (line_end != detail::s_end && *line_end != '\r' && *line_end != '\n') ++line_end; - } return std::string(line_start, line_end); } +std::string parse::report_error_::get_lines_before(text_iterator line_start) const { + //Logger().debugStream() << "get_lines_before start"; + + std::vector<parse::text_iterator> all_line_starts = LineStarts(); + unsigned int target_line = 1; + for (unsigned int line_minus_one = 0; line_minus_one < all_line_starts.size(); ++line_minus_one) { + if (std::distance(all_line_starts[line_minus_one], line_start) < 0) { + target_line = line_minus_one; // want line before line that starts past the requested line_start + break; + } + } + if (target_line <= 1) { + //Logger().debugStream() << "get_lines_before early end"; + return ""; + } + //Logger().debugStream() << "get_lines_before line " << target_line; + + const unsigned int NUM_LINES = 5; + unsigned int retval_first_line = 1; + unsigned int retval_last_line = target_line - 1; + if (retval_last_line > NUM_LINES) + retval_first_line = retval_last_line - NUM_LINES; + + //Logger().debugStream() << "get_lines_before showing lines " << retval_first_line << " to " << retval_last_line; + return std::string(all_line_starts[retval_first_line-1], all_line_starts[retval_last_line-1]); +} + +std::string parse::report_error_::get_lines_after(text_iterator line_start) const { + //Logger().debugStream() << "get_lines_after start"; + + std::vector<parse::text_iterator> all_line_starts = LineStarts(); + unsigned int target_line = 1; + for (unsigned int line_minus_one = 0; line_minus_one < all_line_starts.size(); ++line_minus_one) { + if (std::distance(all_line_starts[line_minus_one], line_start) < 0) { + target_line = line_minus_one; // want line before line that starts past the requested line_start + break; + } + } + if (target_line >= all_line_starts.size()) { + //Logger().debugStream() << "get_lines_after early end"; + return ""; + } + //Logger().debugStream() << "get_lines_after line " << target_line; + + const unsigned int NUM_LINES = 5; + unsigned int retval_first_line = target_line + 1; + unsigned int retval_last_line = all_line_starts.size(); + if (retval_first_line + NUM_LINES < all_line_starts.size()) + retval_last_line = retval_first_line + NUM_LINES; + + //Logger().debugStream() << "get_lines_after showing lines " << retval_first_line << " to " << retval_last_line; + return std::string(all_line_starts[retval_first_line-1], all_line_starts[retval_last_line-1]); +} + void parse::report_error_::generate_error_string(const token_iterator& first, const token_iterator& it, const boost::spirit::info& rule_name, std::string& str) const { + //Logger().debugStream() << "generate_error_string"; std::stringstream is; text_iterator line_start; @@ -161,6 +248,7 @@ boost::tie(line_start, line_number) = line_start_and_line_number(text_it); std::size_t column_number = std::distance(line_start, text_it); + //Logger().debugStream() << "generate_error_string found line number: " << line_number << " column number: " << column_number; is << detail::s_filename << ":" << line_number << ":" << column_number << ": " << "Parse error. Expected"; @@ -176,9 +264,11 @@ if (text_it == detail::s_end) { is << " before end of input.\n"; } else { - is << " here:\n" - << " " << get_line(line_start) << "\n" - << " " << std::string(column_number, ' ') << '^' << std::endl; + is << " here:\n"; + is << get_lines_before(line_start); + is << get_line(line_start) << "\n"; + is << std::string(column_number, ' ') << '^' << std::endl; + is << get_lines_after(line_start); } str = is.str(); Modified: trunk/FreeOrion/parse/ReportParseError.h =================================================================== --- trunk/FreeOrion/parse/ReportParseError.h 2012-03-24 21:23:26 UTC (rev 4745) +++ trunk/FreeOrion/parse/ReportParseError.h 2012-03-25 21:06:23 UTC (rev 4746) @@ -9,11 +9,8 @@ namespace parse { - namespace detail { - - struct info_visitor - { + struct info_visitor { typedef void result_type; typedef boost::spirit::utf8_string string; @@ -39,15 +36,13 @@ void default_send_error_string(const std::string& str); - extern const char* s_filename; - extern text_iterator* s_text_it; - extern text_iterator s_begin; - extern text_iterator s_end; - + extern const char* s_filename; + extern text_iterator* s_text_it; + extern text_iterator s_begin; + extern text_iterator s_end; } - struct report_error_ - { + struct report_error_ { template <typename Arg1, typename Arg2, typename Arg3, typename Arg4> struct result { typedef void type; }; @@ -65,6 +60,8 @@ private: std::pair<text_iterator, unsigned int> line_start_and_line_number(text_iterator error_position) const; std::string get_line(text_iterator line_start) const; + std::string get_lines_before(text_iterator line_start) const; + std::string get_lines_after(text_iterator line_start) const; void generate_error_string(const token_iterator& first, const token_iterator& it, const boost::spirit::info& rule_name, @@ -72,7 +69,6 @@ }; extern const boost::phoenix::function<report_error_> report_error; - } #endif |
From: <geo...@us...> - 2012-04-29 23:10:11
|
Revision: 4848 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4848&view=rev Author: geoffthemedio Date: 2012-04-29 23:10:04 +0000 (Sun, 29 Apr 2012) Log Message: ----------- Commented out some seemingly-unnecessary includes, which might make compiling faster. Modified Paths: -------------- trunk/FreeOrion/parse/BuildingsParser.cpp trunk/FreeOrion/parse/EffectParser.cpp Modified: trunk/FreeOrion/parse/BuildingsParser.cpp =================================================================== --- trunk/FreeOrion/parse/BuildingsParser.cpp 2012-04-29 22:50:27 UTC (rev 4847) +++ trunk/FreeOrion/parse/BuildingsParser.cpp 2012-04-29 23:10:04 UTC (rev 4848) @@ -4,6 +4,7 @@ #include "ParseImpl.h" #include "../universe/Building.h" +//#include "ReportParseError.h" #define DEBUG_PARSERS 0 Modified: trunk/FreeOrion/parse/EffectParser.cpp =================================================================== --- trunk/FreeOrion/parse/EffectParser.cpp 2012-04-29 22:50:27 UTC (rev 4847) +++ trunk/FreeOrion/parse/EffectParser.cpp 2012-04-29 23:10:04 UTC (rev 4848) @@ -7,7 +7,7 @@ #include "../universe/Effect.h" #include "../universe/ValueRef.h" -#include <GG/ReportParseError.h> +//#include "ReportParseError.h" #include <boost/spirit/home/phoenix.hpp> |
From: <geo...@us...> - 2012-07-08 00:48:50
|
Revision: 4998 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4998&view=rev Author: geoffthemedio Date: 2012-07-08 00:48:44 +0000 (Sun, 08 Jul 2012) Log Message: ----------- grooming Modified Paths: -------------- trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp trunk/FreeOrion/parse/StarTypeValueRefParser.cpp trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp Modified: trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp 2012-07-08 00:41:44 UTC (rev 4997) +++ trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp 2012-07-08 00:48:44 UTC (rev 4998) @@ -6,56 +6,53 @@ namespace { + struct planet_size_parser_rules { + planet_size_parser_rules() { + qi::_1_type _1; + qi::_a_type _a; + qi::_val_type _val; + using phoenix::new_; + using phoenix::push_back; + using phoenix::static_cast_; - struct planet_size_parser_rules - { - planet_size_parser_rules() - { - qi::_1_type _1; - qi::_a_type _a; - qi::_val_type _val; - using phoenix::new_; - using phoenix::push_back; - using phoenix::static_cast_; + const parse::lexer& tok = parse::lexer::instance(); - const parse::lexer& tok = parse::lexer::instance(); + final_token + %= tok.PlanetSize_ + ; - final_token - %= tok.PlanetSize_ - ; + constant + = parse::enum_parser<PlanetSize>() [ _val = new_<ValueRef::Constant<PlanetSize> >(_1) ] + ; - constant - = parse::enum_parser<PlanetSize>() [ _val = new_<ValueRef::Constant<PlanetSize> >(_1) ] - ; + variable + = first_token [ push_back(_a, _1) ] > '.' + > -(container_token [ push_back(_a, _1) ] > '.') + > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<PlanetSize> >(_a) ] + ; - variable - = first_token [ push_back(_a, _1) ] > '.' - > -(container_token [ push_back(_a, _1) ] > '.') - > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<PlanetSize> >(_a) ] - ; + initialize_nonnumeric_statistic_parser<PlanetSize>(statistic, final_token); - initialize_nonnumeric_statistic_parser<PlanetSize>(statistic, final_token); + primary_expr + %= constant + | variable + | statistic + ; - primary_expr - %= constant - | variable - | statistic - ; + final_token.name("PlanetSize variable name (e.g., PlanetSize)"); + constant.name("PlanetSize"); + variable.name("PlanetSize variable"); + statistic.name("PlanetSize statistic"); + primary_expr.name("PlanetSize expression"); - final_token.name("PlanetSize variable name (e.g., PlanetSize)"); - constant.name("PlanetSize"); - variable.name("PlanetSize variable"); - statistic.name("PlanetSize statistic"); - primary_expr.name("PlanetSize expression"); - #if DEBUG_VALUEREF_PARSERS - debug(final_token); - debug(constant); - debug(variable); - debug(statistic); - debug(primary_expr); + debug(final_token); + debug(constant); + debug(variable); + debug(statistic); + debug(primary_expr); #endif - } + } typedef parse::value_ref_parser_rule<PlanetSize>::type rule; typedef variable_rule<PlanetSize>::type variable_rule; @@ -67,7 +64,6 @@ statistic_rule statistic; rule primary_expr; }; - } Modified: trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp 2012-07-08 00:41:44 UTC (rev 4997) +++ trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp 2012-07-08 00:48:44 UTC (rev 4998) @@ -6,57 +6,54 @@ namespace { + struct planet_type_parser_rules { + planet_type_parser_rules() { + qi::_1_type _1; + qi::_a_type _a; + qi::_val_type _val; + using phoenix::new_; + using phoenix::push_back; + using phoenix::static_cast_; - struct planet_type_parser_rules - { - planet_type_parser_rules() - { - qi::_1_type _1; - qi::_a_type _a; - qi::_val_type _val; - using phoenix::new_; - using phoenix::push_back; - using phoenix::static_cast_; + const parse::lexer& tok = parse::lexer::instance(); - const parse::lexer& tok = parse::lexer::instance(); + final_token + %= tok.PlanetType_ + | tok.NextBetterPlanetType_ + ; - final_token - %= tok.PlanetType_ - | tok.NextBetterPlanetType_ - ; + constant + = parse::enum_parser<PlanetType>() [ _val = new_<ValueRef::Constant<PlanetType> >(_1) ] + ; - constant - = parse::enum_parser<PlanetType>() [ _val = new_<ValueRef::Constant<PlanetType> >(_1) ] - ; + variable + = first_token [ push_back(_a, _1) ] > '.' + > -(container_token [ push_back(_a, _1) ] > '.') + > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<PlanetType> >(_a) ] + ; - variable - = first_token [ push_back(_a, _1) ] > '.' - > -(container_token [ push_back(_a, _1) ] > '.') - > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<PlanetType> >(_a) ] - ; + initialize_nonnumeric_statistic_parser<PlanetType>(statistic, final_token); - initialize_nonnumeric_statistic_parser<PlanetType>(statistic, final_token); + primary_expr + %= constant + | variable + | statistic + ; - primary_expr - %= constant - | variable - | statistic - ; + final_token.name("PlanetType variable name (e.g., PlanetType)"); + constant.name("PlanetType"); + variable.name("PlanetType variable"); + statistic.name("PlanetType statistic"); + primary_expr.name("PlanetType expression"); - final_token.name("PlanetType variable name (e.g., PlanetType)"); - constant.name("PlanetType"); - variable.name("PlanetType variable"); - statistic.name("PlanetType statistic"); - primary_expr.name("PlanetType expression"); - #if DEBUG_VALUEREF_PARSERS - debug(final_token); - debug(constant); - debug(variable); - debug(statistic); - debug(primary_expr); + debug(final_token); + debug(constant); + debug(variable); + debug(statistic); + debug(primary_expr); #endif - } + } typedef parse::value_ref_parser_rule<PlanetType>::type rule; typedef variable_rule<PlanetType>::type variable_rule; @@ -68,17 +65,13 @@ statistic_rule statistic; rule primary_expr; }; - } - namespace parse { - template <> value_ref_parser_rule<PlanetType>::type& value_ref_parser<PlanetType>() { static planet_type_parser_rules retval; return retval.primary_expr; } - } Modified: trunk/FreeOrion/parse/StarTypeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/StarTypeValueRefParser.cpp 2012-07-08 00:41:44 UTC (rev 4997) +++ trunk/FreeOrion/parse/StarTypeValueRefParser.cpp 2012-07-08 00:48:44 UTC (rev 4998) @@ -6,56 +6,53 @@ namespace { + struct star_type_parser_rules { + star_type_parser_rules() { + qi::_1_type _1; + qi::_a_type _a; + qi::_val_type _val; + using phoenix::new_; + using phoenix::push_back; + using phoenix::static_cast_; - struct star_type_parser_rules - { - star_type_parser_rules() - { - qi::_1_type _1; - qi::_a_type _a; - qi::_val_type _val; - using phoenix::new_; - using phoenix::push_back; - using phoenix::static_cast_; + const parse::lexer& tok = parse::lexer::instance(); - const parse::lexer& tok = parse::lexer::instance(); + final_token + %= tok.StarType_ + ; - final_token - %= tok.StarType_ - ; + constant + = parse::enum_parser<StarType>() [ _val = new_<ValueRef::Constant<StarType> >(_1) ] + ; - constant - = parse::enum_parser<StarType>() [ _val = new_<ValueRef::Constant<StarType> >(_1) ] - ; + variable + = first_token [ push_back(_a, _1) ] > '.' + > -(container_token [ push_back(_a, _1) ] > '.') + > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<StarType> >(_a) ] + ; - variable - = first_token [ push_back(_a, _1) ] > '.' - > -(container_token [ push_back(_a, _1) ] > '.') - > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<StarType> >(_a) ] - ; + initialize_nonnumeric_statistic_parser<StarType>(statistic, final_token); - initialize_nonnumeric_statistic_parser<StarType>(statistic, final_token); + primary_expr + %= constant + | variable + | statistic + ; - primary_expr - %= constant - | variable - | statistic - ; + final_token.name("StarType variable name (e.g., StarType)"); + constant.name("StarType"); + variable.name("StarType variable"); + statistic.name("StarType statistic"); + primary_expr.name("StarType expression"); - final_token.name("StarType variable name (e.g., StarType)"); - constant.name("StarType"); - variable.name("StarType variable"); - statistic.name("StarType statistic"); - primary_expr.name("StarType expression"); - #if DEBUG_VALUEREF_PARSERS - debug(final_token); - debug(constant); - debug(variable); - debug(statistic); - debug(primary_expr); + debug(final_token); + debug(constant); + debug(variable); + debug(statistic); + debug(primary_expr); #endif - } + } typedef parse::value_ref_parser_rule<StarType>::type rule; typedef variable_rule<StarType>::type variable_rule; @@ -67,17 +64,13 @@ statistic_rule statistic; rule primary_expr; }; - } - namespace parse { - template <> value_ref_parser_rule<StarType>::type& value_ref_parser<StarType>() { static star_type_parser_rules retval; return retval.primary_expr; } - } Modified: trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp 2012-07-08 00:41:44 UTC (rev 4997) +++ trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp 2012-07-08 00:48:44 UTC (rev 4998) @@ -6,57 +6,54 @@ namespace { + struct universe_object_type_parser_rules { + universe_object_type_parser_rules() { + qi::_1_type _1; + qi::_a_type _a; + qi::_val_type _val; + using phoenix::new_; + using phoenix::push_back; + using phoenix::static_cast_; - struct universe_object_type_parser_rules - { - universe_object_type_parser_rules() - { - qi::_1_type _1; - qi::_a_type _a; - qi::_val_type _val; - using phoenix::new_; - using phoenix::push_back; - using phoenix::static_cast_; + const parse::lexer& tok = parse::lexer::instance(); - const parse::lexer& tok = parse::lexer::instance(); + final_token + %= tok.ObjectType_ + ; - final_token - %= tok.ObjectType_ - ; + constant + = parse::enum_parser<UniverseObjectType>() [ _val = new_<ValueRef::Constant<UniverseObjectType> >(_1) ] + ; - constant - = parse::enum_parser<UniverseObjectType>() [ _val = new_<ValueRef::Constant<UniverseObjectType> >(_1) ] - ; + variable + = first_token [ push_back(_a, _1) ] > '.' + > -(container_token [ push_back(_a, _1) ] > '.') + > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<UniverseObjectType> >(_a) ] + ; - variable - = first_token [ push_back(_a, _1) ] > '.' - > -(container_token [ push_back(_a, _1) ] > '.') - > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<UniverseObjectType> >(_a) ] - ; + initialize_nonnumeric_statistic_parser<UniverseObjectType>(statistic, final_token); - initialize_nonnumeric_statistic_parser<UniverseObjectType>(statistic, final_token); + primary_expr + %= constant + | variable + | statistic + ; - primary_expr - %= constant - | variable - | statistic - ; + final_token.name("ObjectType variable name (e.g., ObjectType)"); + constant.name("ObjectType"); + variable.name("ObjectType variable"); + statistic.name("ObjectType statistic"); + primary_expr.name("ObjectType expression"); - final_token.name("ObjectType variable name (e.g., ObjectType)"); - constant.name("ObjectType"); - variable.name("ObjectType variable"); - statistic.name("ObjectType statistic"); - primary_expr.name("ObjectType expression"); - #if DEBUG_VALUEREF_PARSERS - debug(final_token); - debug(constant); - debug(variable); - debug(statistic); - debug(primary_expr); + debug(final_token); + debug(constant); + debug(variable); + debug(statistic); + debug(primary_expr); #endif - } + } typedef parse::value_ref_parser_rule<UniverseObjectType>::type rule; typedef variable_rule<UniverseObjectType>::type variable_rule; @@ -68,17 +65,13 @@ statistic_rule statistic; rule primary_expr; }; - } - namespace parse { - template <> value_ref_parser_rule<UniverseObjectType>::type& value_ref_parser<UniverseObjectType>() { static universe_object_type_parser_rules retval; return retval.primary_expr; } - } |
From: <geo...@us...> - 2012-09-16 08:37:42
|
Revision: 5246 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5246&view=rev Author: geoffthemedio Date: 2012-09-16 08:37:36 +0000 (Sun, 16 Sep 2012) Log Message: ----------- -Fixed parsing of X and Y position variant of CreateField effect. -Misc other parsing tweaks / grooming. Modified Paths: -------------- trunk/FreeOrion/parse/EffectParser1.cpp trunk/FreeOrion/parse/Parse.cpp Modified: trunk/FreeOrion/parse/EffectParser1.cpp =================================================================== --- trunk/FreeOrion/parse/EffectParser1.cpp 2012-09-16 07:58:02 UTC (rev 5245) +++ trunk/FreeOrion/parse/EffectParser1.cpp 2012-09-16 08:37:36 UTC (rev 5246) @@ -175,14 +175,16 @@ create_field = tok.CreateField_ >> parse::label(Type_name) >> tok.string [ _a = _1 ] - >> ( - parse::label(Size_name) >> double_value_ref [ _val = new_<Effect::CreateField>(_a, _1) ] - ) - | ( - parse::label(X_name) >> double_value_ref [ _b = _1 ] - >> parse::label(Y_name) >> double_value_ref [ _c = _1 ] - >> parse::label(Size_name) >> double_value_ref [ _val = new_<Effect::CreateField>(_a, _b, _c, _1) ] - ) + >> ( + ( + parse::label(Size_name) >> double_value_ref [ _val = new_<Effect::CreateField>(_a, _1) ] + ) + | ( + parse::label(X_name) >> double_value_ref [ _b = _1 ] + >> parse::label(Y_name) >> double_value_ref [ _c = _1 ] + >> parse::label(Size_name) >> double_value_ref [ _val = new_<Effect::CreateField>(_a, _b, _c, _1) ] + ) + ) ; //move_to Modified: trunk/FreeOrion/parse/Parse.cpp =================================================================== --- trunk/FreeOrion/parse/Parse.cpp 2012-09-16 07:58:02 UTC (rev 5245) +++ trunk/FreeOrion/parse/Parse.cpp 2012-09-16 08:37:36 UTC (rev 5246) @@ -40,26 +40,26 @@ effects_group = tok.EffectsGroup_ - >> parse::label(Scope_name) > parse::detail::condition_parser [ _a = _1 ] - >> -( - parse::label(Activation_name) >> parse::detail::condition_parser [ _b = _1 ] + > parse::label(Scope_name) >> parse::detail::condition_parser [ _a = _1 ] + > -( + parse::label(Activation_name) >> parse::detail::condition_parser [ _b = _1 ] ) - >> -( - parse::label(StackingGroup_name) >> tok.string [ _c = _1 ] + > -( + parse::label(StackingGroup_name) >> tok.string [ _c = _1 ] ) - >> -( - parse::label(AccountingLabel_name) >> tok.string [ _e = _1 ] + > -( + parse::label(AccountingLabel_name) >> tok.string [ _e = _1 ] ) - >> parse::label(Effects_name) - >> ( - '[' > +parse::effect_parser() [ push_back(_d, _1) ] > ']' + > parse::label(Effects_name) + > ( + '[' >> +parse::effect_parser() [ push_back(_d, _1) ] >> ']' | parse::effect_parser() [ push_back(_d, _1) ] ) [ _val = new_<Effect::EffectsGroup>(_a, _b, _d, _e, _c) ] ; start - = '[' > +effects_group [ push_back(_val, construct<boost::shared_ptr<const Effect::EffectsGroup> >(_1)) ] > ']' + = '[' >> +effects_group [ push_back(_val, construct<boost::shared_ptr<const Effect::EffectsGroup> >(_1)) ] >> ']' | effects_group [ push_back(_val, construct<boost::shared_ptr<const Effect::EffectsGroup> >(_1)) ] ; @@ -109,12 +109,12 @@ ; start - = '(' > channel [ _a = _1 ] - > ',' > channel [ _b = _1 ] - > ',' > channel [ _c = _1 ] + = '(' >> channel [ _a = _1 ] + > ',' >> channel [ _b = _1 ] + > ',' >> channel [ _c = _1 ] >> ( ( - ',' > channel [ _val = construct<GG::Clr>(_a, _b, _c, _1) ] + ',' >> channel [ _val = construct<GG::Clr>(_a, _b, _c, _1) ] ) | eps [ _val = construct<GG::Clr>(_a, _b, _c, phoenix::val(255)) ] ) @@ -174,14 +174,14 @@ using phoenix::static_cast_; int_ - = '-' > tok.int_ [ _val = -_1 ] + = '-' >> tok.int_ [ _val = -_1 ] | tok.int_ [ _val = _1 ] ; double_ = '-' >> tok.int_ [ _val = -static_cast_<double>(_1) ] | tok.int_ [ _val = static_cast_<double>(_1) ] - | '-' > tok.double_ [ _val = -_1 ] + | '-' >> tok.double_ [ _val = -_1 ] | tok.double_ [ _val = _1 ] ; |
From: <geo...@us...> - 2012-09-16 18:07:11
|
Revision: 5248 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5248&view=rev Author: geoffthemedio Date: 2012-09-16 18:07:05 +0000 (Sun, 16 Sep 2012) Log Message: ----------- ValueRef parsing tweaks, including fixing UniverseCentreX and Y which were being treated as ints needing casting to doubles, rather than natively doubles as they actually are. Modified Paths: -------------- trunk/FreeOrion/parse/DoubleValueRefParser.cpp trunk/FreeOrion/parse/IntValueRefParser.cpp Modified: trunk/FreeOrion/parse/DoubleValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2012-09-16 18:05:30 UTC (rev 5247) +++ trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2012-09-16 18:07:05 UTC (rev 5248) @@ -65,14 +65,16 @@ ) ) | ( - ( tok.CurrentTurn_ - | tok.UniverseCentreX_ - | tok.UniverseCentreY_ - ) + tok.CurrentTurn_ [ push_back(_a, _1), _val = new_<ValueRef::StaticCast<int, double> >(new_<ValueRef::Variable<int> >(_a)) ] ) - | ( - tok.Value_ [ push_back(_a, _1), _val = new_<ValueRef::Variable<double> >(_a) ] + | (( + tok.Value_ + | tok.UniverseCentreX_ + | tok.UniverseCentreY_ + // add more object-independent ValueRef int functions here + ) + [ push_back(_a, _1), _val = new_<ValueRef::Variable<double> >(_a) ] ) ; Modified: trunk/FreeOrion/parse/IntValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/IntValueRefParser.cpp 2012-09-16 18:05:30 UTC (rev 5247) +++ trunk/FreeOrion/parse/IntValueRefParser.cpp 2012-09-16 18:07:05 UTC (rev 5248) @@ -69,7 +69,8 @@ ) | ( tok.CurrentTurn_ - | tok.Value_ + | tok.Value_ + // add more object-independent ValueRef int functions here ) [ push_back(_a, _1) ] ) |
From: <geo...@us...> - 2012-10-02 18:34:31
|
Revision: 5274 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5274&view=rev Author: geoffthemedio Date: 2012-10-02 18:34:22 +0000 (Tue, 02 Oct 2012) Log Message: ----------- -Added ^ character to lexer, allowing its use in expressions in scripts. -minor grooming Modified Paths: -------------- trunk/FreeOrion/parse/Double.cpp trunk/FreeOrion/parse/Int.cpp trunk/FreeOrion/parse/Lexer.cpp Modified: trunk/FreeOrion/parse/Double.cpp =================================================================== --- trunk/FreeOrion/parse/Double.cpp 2012-10-02 18:07:54 UTC (rev 5273) +++ trunk/FreeOrion/parse/Double.cpp 2012-10-02 18:34:22 UTC (rev 5274) @@ -2,7 +2,5 @@ namespace parse { - double_parser_rule double_; - } Modified: trunk/FreeOrion/parse/Int.cpp =================================================================== --- trunk/FreeOrion/parse/Int.cpp 2012-10-02 18:07:54 UTC (rev 5273) +++ trunk/FreeOrion/parse/Int.cpp 2012-10-02 18:34:22 UTC (rev 5274) @@ -2,7 +2,5 @@ namespace parse { - int_parser_rule int_; - } Modified: trunk/FreeOrion/parse/Lexer.cpp =================================================================== --- trunk/FreeOrion/parse/Lexer.cpp 2012-10-02 18:07:54 UTC (rev 5273) +++ trunk/FreeOrion/parse/Lexer.cpp 2012-10-02 18:34:22 UTC (rev 5274) @@ -73,6 +73,7 @@ | '-' | '*' | '/' + | '^' | '.' | ',' | '(' |
From: <geo...@us...> - 2012-11-16 13:00:56
|
Revision: 5421 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5421&view=rev Author: geoffthemedio Date: 2012-11-16 13:00:44 +0000 (Fri, 16 Nov 2012) Log Message: ----------- Removed some commented-out code. Modified Paths: -------------- trunk/FreeOrion/parse/ConditionParser1.cpp trunk/FreeOrion/parse/ConditionParser2.cpp trunk/FreeOrion/parse/ConditionParser3.cpp trunk/FreeOrion/parse/ConditionParser4.cpp Modified: trunk/FreeOrion/parse/ConditionParser1.cpp =================================================================== --- trunk/FreeOrion/parse/ConditionParser1.cpp 2012-11-16 12:59:33 UTC (rev 5420) +++ trunk/FreeOrion/parse/ConditionParser1.cpp 2012-11-16 13:00:44 UTC (rev 5421) @@ -6,8 +6,6 @@ #include "../universe/Condition.h" #include "../universe/ValueRef.h" -//#include <GG/ReportParseError.h> - #include <boost/spirit/home/phoenix.hpp> @@ -18,10 +16,6 @@ #if DEBUG_CONDITION_PARSERS namespace std { inline ostream& operator<<(ostream& os, const std::vector<const Condition::ConditionBase*>&) { return os; } - //inline ostream& operator<<(ostream& os, const std::vector<const ValueRef::ValueRefBase<std::string>*>&) { return os; } - //inline ostream& operator<<(ostream& os, const std::vector<const ValueRef::ValueRefBase<PlanetSize>*>&) { return os; } - //inline ostream& operator<<(ostream& os, const std::vector<const ValueRef::ValueRefBase<PlanetType>*>&) { return os; } - //inline ostream& operator<<(ostream& os, const std::vector<const ValueRef::ValueRefBase<PlanetEnvironment>*>&) { return os; } } #endif @@ -33,24 +27,6 @@ const parse::value_ref_parser_rule<int>::type& int_value_ref = parse::value_ref_parser<int>(); - //const parse::value_ref_parser_rule<double>::type& double_value_ref = - // parse::value_ref_parser<double>(); - - //const parse::value_ref_parser_rule<std::string>::type& string_value_ref = - // parse::value_ref_parser<std::string>(); - - //const parse::value_ref_parser_rule<PlanetType>::type& planet_type_value_ref = - // parse::value_ref_parser<PlanetType>(); - - //const parse::value_ref_parser_rule<PlanetSize>::type& planet_size_value_ref = - // parse::value_ref_parser<PlanetSize>(); - - //const parse::value_ref_parser_rule<PlanetEnvironment>::type& planet_environment_value_ref = - // parse::value_ref_parser<PlanetEnvironment>(); - - //const parse::value_ref_parser_rule<UniverseObjectType>::type& universe_object_type_value_ref = - // parse::value_ref_parser<UniverseObjectType>(); - qi::_1_type _1; qi::_2_type _2; qi::_3_type _3; @@ -62,11 +38,6 @@ using phoenix::new_; using phoenix::push_back; - //string_ref_vec - // = '[' > +string_value_ref [ push_back(_val, _1) ] > ']' - // | string_value_ref [ push_back(_val, _1) ] - // ; - all = tok.All_ [ _val = new_<Condition::All>() ] ; @@ -111,130 +82,6 @@ ) ; - //homeworld - // = ( - // tok.Homeworld_ - // >> parse::label(Name_name) >> string_ref_vec [ _val = new_<Condition::Homeworld>(_1) ] - // ) - // | tok.Homeworld_ [ _val = new_<Condition::Homeworld>() ] - // ; - - //building - // = ( - // tok.Building_ - // >> -( - // parse::label(Name_name) >> string_ref_vec [ _a = _1 ] - // ) - // ) - // [ _val = new_<Condition::Building>(_a) ] - // ; - - //species - // = tok.Species_ - // >> ( - // parse::label(Name_name) >> string_ref_vec [ _val = new_<Condition::Species>(_1) ] - // | eps [ _val = new_<Condition::Species>() ] // TODO: Is this as useless as it looks? - // ) - // ; - - //focus_type - // = tok.Focus_ - // >> ( - // parse::label(Type_name) >> string_ref_vec [ _val = new_<Condition::FocusType>(_1) ] - // | eps [ _val = new_<Condition::FocusType>(std::vector<const ValueRef::ValueRefBase<std::string>*>()) ] - // ) - // ; - - //planet_type - // = tok.Planet_ - // >> parse::label(Type_name) - // >> ( - // '[' >> +planet_type_value_ref [ push_back(_a, _1) ] >> ']' - // | planet_type_value_ref [ push_back(_a, _1) ] - // ) - // [ _val = new_<Condition::PlanetType>(_a) ] - // ; - - //planet_size - // = tok.Planet_ - // >> parse::label(Size_name) - // >> ( - // '[' >> +planet_size_value_ref [ push_back(_a, _1) ] >> ']' - // | planet_size_value_ref [ push_back(_a, _1) ] - // ) - // [ _val = new_<Condition::PlanetSize>(_a) ] - // ; - - //planet_environment - // = tok.Planet_ - // >> parse::label(Environment_name) - // >> ( - // '[' >> +planet_environment_value_ref [ push_back(_a, _1) ] >> ']' - // | planet_environment_value_ref [ push_back(_a, _1) ] - // ) - // [ _val = new_<Condition::PlanetEnvironment>(_a) ] - // ; - - //object_type - // = parse::enum_parser<UniverseObjectType>() [ _val = new_<Condition::Type>(new_<ValueRef::Constant<UniverseObjectType> >(_1)) ] - // | ( - // tok.ObjectType_ - // >> parse::label(Type_name) >> universe_object_type_value_ref [ _val = new_<Condition::Type>(_1) ] - // ) - // ; - - //meter_value - // = ( - // parse::non_ship_part_meter_type_enum() [ _a = _1 ] - // >> -( - // parse::label(Low_name) >> double_value_ref [ _b = _1 ] - // ) - // >> -( - // parse::label(High_name) >> double_value_ref [ _c = _1 ] - // ) - // ) - // [ _val = new_<Condition::MeterValue>(_a, _b, _c) ] - // ; - - //ship_part_meter_value - // = ( tok.ShipPartMeter_ - // >> parse::label(Part_name) >> tok.string [ _d = _1 ] - // >> parse::ship_part_meter_type_enum() [ _a = _1 ] - // >> -( - // parse::label(Low_name) >> double_value_ref [ _b = _1 ] - // ) - // >> -( - // parse::label(High_name) >> double_value_ref [ _c = _1 ] - // ) - // ) - // [ _val = new_<Condition::ShipPartMeterValue>(_d, _a, _b, _c) ] - // ; - - //empire_meter_value - // = tok.EmpireMeter_ - // >> ( - // parse::label(Empire_name) >> int_value_ref [ _b = _1 ] - // >> parse::label(Meter_name) >> tok.string [ _a = _1 ] - // >> -( - // parse::label(Low_name) >> double_value_ref [ _c = _1 ] - // ) - // >> -( - // parse::label(High_name) >> double_value_ref [ _d = _1 ] - // ) - // [ _val = new_<Condition::EmpireMeterValue>(_b, _a, _c, _d) ] - // ) - // | ( - // parse::label(Meter_name) >> tok.string [ _a = _1 ] - // >> -( - // parse::label(Low_name) >> double_value_ref [ _c = _1 ] - // ) - // >> -( - // parse::label(High_name) >> double_value_ref [ _d = _1 ] - // ) - // [ _val = new_<Condition::EmpireMeterValue>(_a, _c, _d) ] - // ) - // ; - and_ = tok.And_ >> '[' >> parse::detail::condition_parser [ push_back(_a, _1) ] >> +parse::detail::condition_parser [ push_back(_a, _1) ] >> lit(']') @@ -262,23 +109,11 @@ | monster | armed | owned_by - //| homeworld - //| building - //| species - //| focus_type - //| planet_type - //| planet_size - //| planet_environment - //| object_type - //| meter_value - //| ship_part_meter_value - //| empire_meter_value | and_ | or_ | not_ ; - //string_ref_vec.name("sequence of string expressions"); all.name("All"); source.name("Source"); root_candidate.name("RootCandidate"); @@ -288,23 +123,11 @@ monster.name("Monster"); armed.name("Armed"); owned_by.name("OwnedBy"); // TODO: Should this be renamed Affilated or similar? - //homeworld.name("Homeworld"); - //building.name("Building"); - //species.name("Species"); - //focus_type.name("Focus"); - //planet_type.name("PlanetType"); - //planet_size.name("PlanetSize"); - //planet_environment.name("PlanetEnvironment"); - //object_type.name("ObjectType"); - //meter_value.name("MeterValue"); - //ship_part_meter_value.name("ShipPartMeterValue"); - //empire_meter_value.name("EmpireMeterValue"); and_.name("And"); or_.name("Or"); not_.name("Not"); #if DEBUG_CONDITION_PARSERS - //debug(string_ref_vec); debug(all); debug(source); debug(root_candidate); @@ -314,29 +137,12 @@ debug(monster); debug(armed); debug(owned_by); - //debug(homeworld); - //debug(building); - //debug(species); - //debug(focus_type); - //debug(planet_type); - //debug(planet_size); - //debug(planet_environment); - //debug(object_type); - //debug(meter_value); - //debug(ship_part_meter_value); - //debug(empire_meter_value); debug(and_); debug(or_); debug(not_); #endif } - //typedef boost::spirit::qi::rule< - // parse::token_iterator, - // std::vector<const ValueRef::ValueRefBase<std::string>*> (), - // parse::skipper_type - //> string_ref_vec_rule; - typedef boost::spirit::qi::rule< parse::token_iterator, Condition::ConditionBase* (), @@ -344,58 +150,6 @@ parse::skipper_type > owned_by_rule; - //typedef boost::spirit::qi::rule< - // parse::token_iterator, - // Condition::ConditionBase* (), - // qi::locals< - // MeterType, - // ValueRef::ValueRefBase<double>*, - // ValueRef::ValueRefBase<double>*, - // std::string - // >, - // parse::skipper_type - //> meter_value_rule; - - //typedef boost::spirit::qi::rule< - // parse::token_iterator, - // Condition::ConditionBase* (), - // qi::locals< - // std::string, - // ValueRef::ValueRefBase<int>*, - // ValueRef::ValueRefBase<double>*, - // ValueRef::ValueRefBase<double>* - // >, - // parse::skipper_type - //> empire_meter_value_rule; - - //typedef boost::spirit::qi::rule< - // parse::token_iterator, - // Condition::ConditionBase* (), - // qi::locals<std::vector<const ValueRef::ValueRefBase<std::string>*> >, - // parse::skipper_type - //> building_rule; - - //typedef boost::spirit::qi::rule< - // parse::token_iterator, - // Condition::ConditionBase* (), - // qi::locals<std::vector<const ValueRef::ValueRefBase<PlanetType>*> >, - // parse::skipper_type - //> planet_type_rule; - - //typedef boost::spirit::qi::rule< - // parse::token_iterator, - // Condition::ConditionBase* (), - // qi::locals<std::vector<const ValueRef::ValueRefBase<PlanetSize>*> >, - // parse::skipper_type - //> planet_size_rule; - - //typedef boost::spirit::qi::rule< - // parse::token_iterator, - // Condition::ConditionBase* (), - // qi::locals<std::vector<const ValueRef::ValueRefBase<PlanetEnvironment>*> >, - // parse::skipper_type - //> planet_environment_rule; - typedef boost::spirit::qi::rule< parse::token_iterator, Condition::ConditionBase* (), @@ -403,7 +157,6 @@ parse::skipper_type > and_or_rule; - //string_ref_vec_rule string_ref_vec; parse::condition_parser_rule all; parse::condition_parser_rule source; parse::condition_parser_rule root_candidate; @@ -413,17 +166,6 @@ parse::condition_parser_rule monster; parse::condition_parser_rule armed; owned_by_rule owned_by; - //parse::condition_parser_rule homeworld; - //building_rule building; - //parse::condition_parser_rule species; - //parse::condition_parser_rule focus_type; - //planet_type_rule planet_type; - //planet_size_rule planet_size; - //planet_environment_rule planet_environment; - //parse::condition_parser_rule object_type; - //meter_value_rule meter_value; - //meter_value_rule ship_part_meter_value; - //empire_meter_value_rule empire_meter_value; and_or_rule and_; and_or_rule or_; parse::condition_parser_rule not_; Modified: trunk/FreeOrion/parse/ConditionParser2.cpp =================================================================== --- trunk/FreeOrion/parse/ConditionParser2.cpp 2012-11-16 12:59:33 UTC (rev 5420) +++ trunk/FreeOrion/parse/ConditionParser2.cpp 2012-11-16 13:00:44 UTC (rev 5421) @@ -5,8 +5,6 @@ #include "ValueRefParser.h" #include "../universe/Condition.h" -//#include <GG/ReportParseError.h> - #include <boost/spirit/home/phoenix.hpp> Modified: trunk/FreeOrion/parse/ConditionParser3.cpp =================================================================== --- trunk/FreeOrion/parse/ConditionParser3.cpp 2012-11-16 12:59:33 UTC (rev 5420) +++ trunk/FreeOrion/parse/ConditionParser3.cpp 2012-11-16 13:00:44 UTC (rev 5421) @@ -4,8 +4,6 @@ #include "Label.h" #include "../universe/Condition.h" -//#include <GG/ReportParseError.h> - #include <boost/spirit/home/phoenix.hpp> Modified: trunk/FreeOrion/parse/ConditionParser4.cpp =================================================================== --- trunk/FreeOrion/parse/ConditionParser4.cpp 2012-11-16 12:59:33 UTC (rev 5420) +++ trunk/FreeOrion/parse/ConditionParser4.cpp 2012-11-16 13:00:44 UTC (rev 5421) @@ -6,8 +6,6 @@ #include "../universe/Condition.h" #include "../universe/ValueRef.h" -//#include <GG/ReportParseError.h> - #include <boost/spirit/home/phoenix.hpp> @@ -61,7 +59,6 @@ qi::_d_type _d; qi::_val_type _val; qi::eps_type eps; - //qi::lit_type lit; using phoenix::new_; using phoenix::push_back; @@ -70,50 +67,6 @@ | string_value_ref [ push_back(_val, _1) ] ; - //all - // = tok.All_ [ _val = new_<Condition::All>() ] - // ; - - //source - // = tok.Source_ [ _val = new_<Condition::Source>() ] - // ; - - //root_candidate - // = tok.RootCandidate_ [ _val = new_<Condition::RootCandidate>() ] - // ; - - //target - // = tok.Target_ [ _val = new_<Condition::Target>() ] - // ; - - //stationary - // = tok.Stationary_ [ _val = new_<Condition::Stationary>() ] - // ; - - //capital - // = tok.Capital_ [ _val = new_<Condition::Capital>() ] - // ; - - //monster - // = tok.Monster_ [ _val = new_<Condition::Monster>() ] - // ; - - //armed - // = tok.Armed_ [ _val = new_<Condition::Armed>() ] - // ; - - //owned_by - // = tok.OwnedBy_ - // >> -( - // parse::label(Affiliation_name) >> parse::enum_parser<EmpireAffiliationType>() [ _a = _1 ] - // | eps [ _a = AFFIL_SELF ] - // ) - // >> ( - // parse::label(Empire_name) >> int_value_ref [ _val = new_<Condition::EmpireAffiliation>(_1, _a) ] - // | eps [ _val = new_<Condition::EmpireAffiliation>(_a) ] - // ) - // ; - homeworld = ( tok.Homeworld_ @@ -238,34 +191,8 @@ ) ; - //and_ - // = tok.And_ - // >> '[' >> parse::detail::condition_parser [ push_back(_a, _1) ] >> +parse::detail::condition_parser [ push_back(_a, _1) ] >> lit(']') - // [ _val = new_<Condition::And>(_a) ] - // ; - - //or_ - // = tok.Or_ - // >> '[' >> parse::detail::condition_parser [ push_back(_a, _1) ] >> +parse::detail::condition_parser [ push_back(_a, _1) ] >> lit(']') - // [ _val = new_<Condition::Or>(_a) ] - // ; - - //not_ - // = tok.Not_ - // >> parse::detail::condition_parser [ _val = new_<Condition::Not>(_1) ] - // ; - start - %= /*all - | source - | root_candidate - | target - | stationary - | capital - | monster - | armed - | owned_by - |*/ homeworld + %= homeworld | building | species | focus_type @@ -276,21 +203,9 @@ | meter_value | ship_part_meter_value | empire_meter_value - //| and_ - //| or_ - //| not_ ; string_ref_vec.name("sequence of string expressions"); - //all.name("All"); - //source.name("Source"); - //root_candidate.name("RootCandidate"); - //target.name("Target"); - //stationary.name("Stationary"); - //capital.name("Capital"); - //monster.name("Monster"); - //armed.name("Armed"); - //owned_by.name("OwnedBy"); // TODO: Should this be renamed Affilated or similar? homeworld.name("Homeworld"); building.name("Building"); species.name("Species"); @@ -302,21 +217,9 @@ meter_value.name("MeterValue"); ship_part_meter_value.name("ShipPartMeterValue"); empire_meter_value.name("EmpireMeterValue"); - //and_.name("And"); - //or_.name("Or"); - //not_.name("Not"); #if DEBUG_CONDITION_PARSERS debug(string_ref_vec); - //debug(all); - //debug(source); - //debug(root_candidate); - //debug(target); - //debug(stationary); - //debug(capital); - //debug(monster); - //debug(armed); - //debug(owned_by); debug(homeworld); debug(building); debug(species); @@ -328,9 +231,6 @@ debug(meter_value); debug(ship_part_meter_value); debug(empire_meter_value); - //debug(and_); - //debug(or_); - //debug(not_); #endif } @@ -340,13 +240,6 @@ parse::skipper_type > string_ref_vec_rule; - //typedef boost::spirit::qi::rule< - // parse::token_iterator, - // Condition::ConditionBase* (), - // qi::locals<EmpireAffiliationType>, - // parse::skipper_type - //> owned_by_rule; - typedef boost::spirit::qi::rule< parse::token_iterator, Condition::ConditionBase* (), @@ -399,23 +292,7 @@ parse::skipper_type > planet_environment_rule; - //typedef boost::spirit::qi::rule< - // parse::token_iterator, - // Condition::ConditionBase* (), - // qi::locals<std::vector<const Condition::ConditionBase*> >, - // parse::skipper_type - //> and_or_rule; - string_ref_vec_rule string_ref_vec; - //parse::condition_parser_rule all; - //parse::condition_parser_rule source; - //parse::condition_parser_rule root_candidate; - //parse::condition_parser_rule target; - //parse::condition_parser_rule stationary; - //parse::condition_parser_rule capital; - //parse::condition_parser_rule monster; - //parse::condition_parser_rule armed; - //owned_by_rule owned_by; parse::condition_parser_rule homeworld; building_rule building; parse::condition_parser_rule species; @@ -427,9 +304,6 @@ meter_value_rule meter_value; meter_value_rule ship_part_meter_value; empire_meter_value_rule empire_meter_value; - //and_or_rule and_; - //and_or_rule or_; - //parse::condition_parser_rule not_; parse::condition_parser_rule start; }; } |
From: <geo...@us...> - 2013-05-05 21:14:44
|
Revision: 6001 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=6001&view=rev Author: geoffthemedio Date: 2013-05-05 21:14:36 +0000 (Sun, 05 May 2013) Log Message: ----------- PatdPatch by adrian_broher cleaning up parser includes. Modified Paths: -------------- trunk/FreeOrion/parse/BuildingsParser.cpp trunk/FreeOrion/parse/DoubleValueRefParser.cpp trunk/FreeOrion/parse/EffectParser1.cpp trunk/FreeOrion/parse/EffectParser2.cpp trunk/FreeOrion/parse/EffectParser3.cpp trunk/FreeOrion/parse/EffectParser4.cpp trunk/FreeOrion/parse/IntValueRefParser.cpp trunk/FreeOrion/parse/Lexer.h trunk/FreeOrion/parse/PlanetEnvironmentValueRefParser.cpp trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp trunk/FreeOrion/parse/StarTypeValueRefParser.cpp trunk/FreeOrion/parse/StringValueRefParser.cpp trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp Modified: trunk/FreeOrion/parse/BuildingsParser.cpp =================================================================== --- trunk/FreeOrion/parse/BuildingsParser.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/BuildingsParser.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -5,8 +5,6 @@ #include "ParseImpl.h" #include "../universe/Building.h" -//#include "ReportParseError.h" - #define DEBUG_PARSERS 0 #if DEBUG_PARSERS Modified: trunk/FreeOrion/parse/DoubleValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -1,7 +1,6 @@ #include "ValueRefParserImpl.h" //#include "Double.h" -//#include <GG/ReportParseError.h> //extern name_token_rule first_token; // in IntValueRefParser.cpp //extern name_token_rule container_token; // in IntValueRefParser.cpp Modified: trunk/FreeOrion/parse/EffectParser1.cpp =================================================================== --- trunk/FreeOrion/parse/EffectParser1.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/EffectParser1.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -6,7 +6,6 @@ #include "ValueRefParser.h" #include "../universe/Effect.h" //#include "../universe/ValueRef.h" -//#include "ReportParseError.h" #include <boost/spirit/home/phoenix.hpp> Modified: trunk/FreeOrion/parse/EffectParser2.cpp =================================================================== --- trunk/FreeOrion/parse/EffectParser2.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/EffectParser2.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -6,7 +6,6 @@ #include "ValueRefParser.h" #include "../universe/Effect.h" //#include "../universe/ValueRef.h" -//#include "ReportParseError.h" #include <boost/spirit/home/phoenix.hpp> Modified: trunk/FreeOrion/parse/EffectParser3.cpp =================================================================== --- trunk/FreeOrion/parse/EffectParser3.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/EffectParser3.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -6,7 +6,6 @@ #include "ValueRefParser.h" #include "../universe/Effect.h" //#include "../universe/ValueRef.h" -//#include "ReportParseError.h" #include <boost/spirit/home/phoenix.hpp> Modified: trunk/FreeOrion/parse/EffectParser4.cpp =================================================================== --- trunk/FreeOrion/parse/EffectParser4.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/EffectParser4.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -6,7 +6,6 @@ #include "ValueRefParser.h" #include "../universe/Effect.h" //#include "../universe/ValueRef.h" -//#include "ReportParseError.h" #include <boost/spirit/home/phoenix.hpp> Modified: trunk/FreeOrion/parse/IntValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/IntValueRefParser.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/IntValueRefParser.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -1,8 +1,6 @@ #include "ValueRefParserImpl.h" -//#include <GG/ReportParseError.h> - name_token_rule first_token; name_token_rule container_token; Modified: trunk/FreeOrion/parse/Lexer.h =================================================================== --- trunk/FreeOrion/parse/Lexer.h 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/Lexer.h 2013-05-05 21:14:36 UTC (rev 6001) @@ -4,7 +4,8 @@ #define BOOST_SPIRIT_NO_PREDEFINED_TERMINALS -#include <GG/LexerFwd.h> +#include <boost/spirit/include/lex_lexertl.hpp> +#include <boost/spirit/home/lex/lexer/lexertl/position_token.hpp> #include "../universe/Enums.h" #include "../universe/Names.h" Modified: trunk/FreeOrion/parse/PlanetEnvironmentValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/PlanetEnvironmentValueRefParser.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/PlanetEnvironmentValueRefParser.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -2,9 +2,7 @@ #include "EnumParser.h" -#include <GG/ReportParseError.h> - namespace { struct planet_environment_parser_rules { planet_environment_parser_rules() { Modified: trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -2,9 +2,7 @@ #include "EnumParser.h" -#include <GG/ReportParseError.h> - namespace { struct planet_size_parser_rules { planet_size_parser_rules() { Modified: trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -2,9 +2,7 @@ #include "EnumParser.h" -#include <GG/ReportParseError.h> - namespace { struct planet_type_parser_rules { planet_type_parser_rules() { Modified: trunk/FreeOrion/parse/StarTypeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/StarTypeValueRefParser.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/StarTypeValueRefParser.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -2,9 +2,7 @@ #include "EnumParser.h" -#include <GG/ReportParseError.h> - namespace { struct star_type_parser_rules { star_type_parser_rules() { Modified: trunk/FreeOrion/parse/StringValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/StringValueRefParser.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/StringValueRefParser.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -2,9 +2,7 @@ #include "EnumParser.h" -#include <GG/ReportParseError.h> - namespace { struct string_parser_rules { string_parser_rules() { qi::_1_type _1; Modified: trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp 2013-05-05 16:48:02 UTC (rev 6000) +++ trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp 2013-05-05 21:14:36 UTC (rev 6001) @@ -2,9 +2,7 @@ #include "EnumParser.h" -#include <GG/ReportParseError.h> - namespace { struct universe_object_type_parser_rules { universe_object_type_parser_rules() { |
From: <geo...@us...> - 2013-05-27 08:25:40
|
Revision: 6085 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=6085&view=rev Author: geoffthemedio Date: 2013-05-27 08:25:29 +0000 (Mon, 27 May 2013) Log Message: ----------- Patch by adrian_broher removing code duplication in parsers relating to tag parsing. Modified Paths: -------------- trunk/FreeOrion/parse/BuildingsParser.cpp trunk/FreeOrion/parse/FieldsParser.cpp trunk/FreeOrion/parse/Parse.cpp trunk/FreeOrion/parse/ParseImpl.h trunk/FreeOrion/parse/ShipHullsParser.cpp trunk/FreeOrion/parse/ShipPartsParser.cpp trunk/FreeOrion/parse/SpeciesParser.cpp Modified: trunk/FreeOrion/parse/BuildingsParser.cpp =================================================================== --- trunk/FreeOrion/parse/BuildingsParser.cpp 2013-05-27 07:51:29 UTC (rev 6084) +++ trunk/FreeOrion/parse/BuildingsParser.cpp 2013-05-27 08:25:29 UTC (rev 6085) @@ -73,16 +73,6 @@ | eps [ _val = true ] ; - tags - = -( - parse::label(Tags_name) - >> ( - '[' > +tok.string [ push_back(_r1, _1) ] > ']' - | tok.string [ push_back(_r1, _1) ] - ) - ) - ; - building_type = building_prefix(_a, _b) > parse::label(BuildCost_name) > double_value_ref [ _c = _1 ] @@ -92,7 +82,7 @@ parse::label(CaptureResult_name) >> parse::enum_parser<CaptureResult>() [ _f = _1 ] | eps [ _f = CR_CAPTURE ] ) - > tags(_g) + > parse::detail::tags_parser()(_g) > parse::label(Location_name) > parse::detail::condition_parser [ _h = _1 ] > parse::label(EffectsGroups_name) > -parse::detail::effects_group_parser() [ _i = _1 ] > parse::label(Icon_name) > tok.string @@ -105,13 +95,11 @@ building_prefix.name("BuildingType"); producible.name("Producible or Unproducible"); - tags.name("Tags"); building_type.name("BuildingType"); #if DEBUG_PARSERS debug(building_prefix); debug(producible); - debug(tags); debug(building_type); #endif @@ -132,12 +120,6 @@ typedef boost::spirit::qi::rule< parse::token_iterator, - void (std::vector<std::string>&), - parse::skipper_type - > tags_rule; - - typedef boost::spirit::qi::rule< - parse::token_iterator, void (std::map<std::string, BuildingType*>&), qi::locals< std::string, @@ -161,7 +143,6 @@ building_prefix_rule building_prefix; producible_rule producible; - tags_rule tags; building_type_rule building_type; start_rule start; }; Modified: trunk/FreeOrion/parse/FieldsParser.cpp =================================================================== --- trunk/FreeOrion/parse/FieldsParser.cpp 2013-05-27 07:51:29 UTC (rev 6084) +++ trunk/FreeOrion/parse/FieldsParser.cpp 2013-05-27 08:25:29 UTC (rev 6085) @@ -57,7 +57,7 @@ > parse::label(Name_name) >> tok.string [ _a = _1 ] > parse::label(Description_name) >> tok.string [ _b = _1 ] > parse::label(Stealth_name) >> parse::double_ [ _c = _1] - > tags(_d) + > parse::detail::tags_parser()(_d) //> -( // parse::label(Location_name) >> parse::detail::condition_parser [ _e = _1 ] // ) @@ -67,25 +67,13 @@ > parse::label(Graphic_name) >> tok.string [ insert(_r1, new_<FieldType>(_a, _b, _c, _d,/* _e, */_f, _1)) ] ; - tags - = -( - parse::label(Tags_name) - >> ( - '[' > +tok.string [ push_back(_r1, _1) ] > ']' - | tok.string [ push_back(_r1, _1) ] - ) - ) - ; - start = +field(_r1) ; field.name("FieldType"); - tags.name("Tags"); #if DEBUG_PARSERS - debug(tags); debug(field); #endif @@ -94,12 +82,6 @@ typedef boost::spirit::qi::rule< parse::token_iterator, - void (std::vector<std::string>&), - parse::skipper_type - > tags_rule; - - typedef boost::spirit::qi::rule< - parse::token_iterator, void (std::map<std::string, FieldType*>&), qi::locals< std::string, @@ -118,7 +100,6 @@ parse::skipper_type > start_rule; - tags_rule tags; field_rule field; start_rule start; }; Modified: trunk/FreeOrion/parse/Parse.cpp =================================================================== --- trunk/FreeOrion/parse/Parse.cpp 2013-05-27 07:51:29 UTC (rev 6084) +++ trunk/FreeOrion/parse/Parse.cpp 2013-05-27 08:25:29 UTC (rev 6085) @@ -28,6 +28,34 @@ #endif namespace { + struct tags_rules { + tags_rules() { + const parse::lexer& tok = parse::lexer::instance(); + + qi::_1_type _1; + qi::_r1_type _r1; + using phoenix::push_back; + + start + = -( + parse::label(Tags_name) + >> ( + ('[' > +tok.string [ push_back(_r1, _1) ] > ']') + | tok.string [ push_back(_r1, _1) ] + ) + ) + ; + + start.name("Tags"); + +#if DEBUG_PARSERS + debug(start); +#endif + } + + parse::detail::tags_rule start; + }; + struct effects_group_rules { effects_group_rules() { const parse::lexer& tok = parse::lexer::instance(); @@ -423,6 +451,11 @@ } namespace detail { + tags_rule& tags_parser() { + static tags_rules rules; + return rules.start; + } + effects_group_rule& effects_group_parser() { static effects_group_rules rules; return rules.start; Modified: trunk/FreeOrion/parse/ParseImpl.h =================================================================== --- trunk/FreeOrion/parse/ParseImpl.h 2013-05-27 07:51:29 UTC (rev 6084) +++ trunk/FreeOrion/parse/ParseImpl.h 2013-05-27 08:25:29 UTC (rev 6085) @@ -16,6 +16,14 @@ namespace parse { namespace detail { typedef boost::spirit::qi::rule< + parse::token_iterator, + void (std::vector<std::string>&), + parse::skipper_type + > tags_rule; + tags_rule& tags_parser(); + + + typedef boost::spirit::qi::rule< token_iterator, std::vector<boost::shared_ptr<const Effect::EffectsGroup> > (), skipper_type Modified: trunk/FreeOrion/parse/ShipHullsParser.cpp =================================================================== --- trunk/FreeOrion/parse/ShipHullsParser.cpp 2013-05-27 07:51:29 UTC (rev 6084) +++ trunk/FreeOrion/parse/ShipHullsParser.cpp 2013-05-27 08:25:29 UTC (rev 6085) @@ -109,21 +109,11 @@ | eps [ _r1 = new_<Condition::All>() ] ; - tags - = -( - parse::label(Tags_name) - >> ( - '[' > +tok.string [ push_back(_r1, _1) ] > ']' - | tok.string [ push_back(_r1, _1) ] - ) - ) - ; - common_params = parse::label(BuildCost_name) > double_value_ref [ _a = _1 ] > parse::label(BuildTime_name) > int_value_ref [ _b = _1 ] > producible [ _c = _1 ] - > tags(_d) + > parse::detail::tags_parser()(_d) > location(_e) > -( parse::label(EffectsGroups_name) >> parse::detail::effects_group_parser() [ _f = _1 ] @@ -151,7 +141,6 @@ slot.name("Slot"); slots.name("Slots"); location.name("Location"); - tags.name("Tags"); common_params.name("Part Hull Common Params"); hull.name("Hull"); @@ -163,7 +152,6 @@ debug(slot); debug(slots); debug(location); - debug(tags); debug(common_params); debug(hull); #endif @@ -232,12 +220,6 @@ typedef boost::spirit::qi::rule< parse::token_iterator, - void (std::vector<std::string>&), - parse::skipper_type - > tags_rule; - - typedef boost::spirit::qi::rule< - parse::token_iterator, PartHullCommonParams (), qi::locals< ValueRef::ValueRefBase<double>*, @@ -275,7 +257,6 @@ slot_rule slot; slots_rule slots; location_rule location; - tags_rule tags; part_hull_common_params_rule common_params; hull_rule hull; art_rule art; Modified: trunk/FreeOrion/parse/ShipPartsParser.cpp =================================================================== --- trunk/FreeOrion/parse/ShipPartsParser.cpp 2013-05-27 07:51:29 UTC (rev 6084) +++ trunk/FreeOrion/parse/ShipPartsParser.cpp 2013-05-27 08:25:29 UTC (rev 6085) @@ -91,21 +91,11 @@ | eps [ _r1 = new_<Condition::All>() ] ; - tags - = -( - parse::label(Tags_name) - >> ( - '[' > +tok.string [ push_back(_r1, _1) ] > ']' - | tok.string [ push_back(_r1, _1) ] - ) - ) - ; - common_params = parse::label(BuildCost_name) > double_value_ref [ _a = _1 ] > parse::label(BuildTime_name) > int_value_ref [ _b = _1 ] > producible [ _c = _1 ] - > tags(_d) + > parse::detail::tags_parser()(_d) > location(_e) > -( parse::label(EffectsGroups_name) >> parse::detail::effects_group_parser() [ _f = _1 ] @@ -130,7 +120,6 @@ producible.name("Producible or Unproducible"); slots.name("mountable slot types"); location.name("Location"); - tags.name("Tags"); common_params.name("Part Hull Common Params"); part_type.name("Part"); @@ -139,7 +128,6 @@ debug(producible); debug(slots); debug(location); - debug(tags); debug(common_params); debug(part_type); #endif @@ -173,12 +161,6 @@ typedef boost::spirit::qi::rule< parse::token_iterator, - void (std::vector<std::string>&), - parse::skipper_type - > tags_rule; - - typedef boost::spirit::qi::rule< - parse::token_iterator, PartHullCommonParams (), qi::locals< ValueRef::ValueRefBase<double>*, @@ -214,7 +196,6 @@ part_type_prefix_rule part_type_prefix; producible_rule producible; location_rule location; - tags_rule tags; part_hull_common_params_rule common_params; slots_rule slots; part_type_rule part_type; Modified: trunk/FreeOrion/parse/SpeciesParser.cpp =================================================================== --- trunk/FreeOrion/parse/SpeciesParser.cpp 2013-05-27 07:51:29 UTC (rev 6084) +++ trunk/FreeOrion/parse/SpeciesParser.cpp 2013-05-27 08:25:29 UTC (rev 6085) @@ -94,16 +94,6 @@ = parse::label(Environments_name) >> environment_map [ _r1 = _1 ] ; - tags - = -( - parse::label(Tags_name) - >> ( - '[' > +tok.string [ push_back(_r1, _1) ] > ']' - | tok.string [ push_back(_r1, _1) ] - ) - ) - ; - species_params = ((tok.Playable_ [ _a = true ]) | eps) > ((tok.Native_ [ _b = true ]) | eps) @@ -117,7 +107,7 @@ > parse::label(Name_name) > tok.string [ _a = _1 ] > parse::label(Description_name) > tok.string [ _b = _1 ] > species_params [ _c = _1] - > tags(_d) + > parse::detail::tags_parser()(_d) > -foci(_e) > -effects(_f) > -environments(_g) @@ -135,7 +125,6 @@ environment_map_element.name("Type = <type> Environment = <env>"); environment_map.name("Environments"); environments.name("Environments"); - tags.name("Tags"); species_params.name("Species Flags"); species.name("Species"); start.name("start"); @@ -147,7 +136,6 @@ debug(environment_map_element); debug(environment_map); debug(environments); - debug(tags); debug(species_params); debug(species); debug(start); @@ -200,12 +188,6 @@ typedef boost::spirit::qi::rule< parse::token_iterator, - void (std::vector<std::string>&), - parse::skipper_type - > tags_rule; - - typedef boost::spirit::qi::rule< - parse::token_iterator, SpeciesParams (), qi::locals< bool, @@ -243,7 +225,6 @@ environment_map_element_rule environment_map_element; environment_map_rule environment_map; environments_rule environments; - tags_rule tags; species_params_rule species_params; species_rule species; start_rule start; |
From: <geo...@us...> - 2013-06-08 18:08:31
|
Revision: 6129 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=6129&view=rev Author: geoffthemedio Date: 2013-06-08 18:08:22 +0000 (Sat, 08 Jun 2013) Log Message: ----------- Patches by adrian_broher cleaning up some parser code. Modified Paths: -------------- trunk/FreeOrion/parse/AlignmentsParser.cpp trunk/FreeOrion/parse/BuildingsParser.cpp trunk/FreeOrion/parse/ConditionParser1.cpp trunk/FreeOrion/parse/ConditionParser2.cpp trunk/FreeOrion/parse/ConditionParser3.cpp trunk/FreeOrion/parse/ConditionParser4.cpp trunk/FreeOrion/parse/EffectParser1.cpp trunk/FreeOrion/parse/EffectParser2.cpp trunk/FreeOrion/parse/EffectParser3.cpp trunk/FreeOrion/parse/EffectParser4.cpp trunk/FreeOrion/parse/FieldsParser.cpp trunk/FreeOrion/parse/KeymapParser.cpp trunk/FreeOrion/parse/MonsterFleetPlansParser.cpp trunk/FreeOrion/parse/PlanetEnvironmentValueRefParser.cpp trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp trunk/FreeOrion/parse/SpecialsParser.cpp trunk/FreeOrion/parse/StarTypeValueRefParser.cpp trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp Modified: trunk/FreeOrion/parse/AlignmentsParser.cpp =================================================================== --- trunk/FreeOrion/parse/AlignmentsParser.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/AlignmentsParser.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -29,7 +29,6 @@ qi::_b_type _b; qi::_r1_type _r1; using phoenix::construct; - using phoenix::new_; using phoenix::push_back; alignment Modified: trunk/FreeOrion/parse/BuildingsParser.cpp =================================================================== --- trunk/FreeOrion/parse/BuildingsParser.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/BuildingsParser.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -59,7 +59,6 @@ qi::_val_type _val; qi::eps_type eps; using phoenix::new_; - using phoenix::push_back; building_prefix = tok.BuildingType_ Modified: trunk/FreeOrion/parse/ConditionParser1.cpp =================================================================== --- trunk/FreeOrion/parse/ConditionParser1.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/ConditionParser1.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -28,9 +28,6 @@ parse::value_ref_parser<int>(); qi::_1_type _1; - qi::_2_type _2; - qi::_3_type _3; - qi::_4_type _4; qi::_a_type _a; qi::_val_type _val; qi::eps_type eps; Modified: trunk/FreeOrion/parse/ConditionParser2.cpp =================================================================== --- trunk/FreeOrion/parse/ConditionParser2.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/ConditionParser2.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -20,9 +20,6 @@ const parse::value_ref_parser_rule<int>::type& int_value_ref = parse::value_ref_parser<int>(); qi::_1_type _1; - qi::_2_type _2; - qi::_3_type _3; - qi::_4_type _4; qi::_a_type _a; // intref qi::_b_type _b; // intref qi::_c_type _c; // intref Modified: trunk/FreeOrion/parse/ConditionParser3.cpp =================================================================== --- trunk/FreeOrion/parse/ConditionParser3.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/ConditionParser3.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -27,13 +27,9 @@ const parse::value_ref_parser_rule< ::StarType>::type& star_type_value_ref= parse::value_ref_parser< ::StarType>(); qi::_1_type _1; - qi::_2_type _2; - qi::_3_type _3; - qi::_4_type _4; qi::_a_type _a; qi::_b_type _b; qi::_c_type _c; - qi::_d_type _d; qi::_val_type _val; using phoenix::new_; using phoenix::push_back; Modified: trunk/FreeOrion/parse/ConditionParser4.cpp =================================================================== --- trunk/FreeOrion/parse/ConditionParser4.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/ConditionParser4.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -50,9 +50,6 @@ parse::value_ref_parser<UniverseObjectType>(); qi::_1_type _1; - qi::_2_type _2; - qi::_3_type _3; - qi::_4_type _4; qi::_a_type _a; qi::_b_type _b; qi::_c_type _c; Modified: trunk/FreeOrion/parse/EffectParser1.cpp =================================================================== --- trunk/FreeOrion/parse/EffectParser1.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/EffectParser1.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -16,15 +16,10 @@ struct effect_parser_rules_1 { effect_parser_rules_1() { qi::_1_type _1; - qi::_2_type _2; - qi::_3_type _3; - qi::_4_type _4; qi::_a_type _a; qi::_b_type _b; qi::_c_type _c; qi::_d_type _d; - qi::_e_type _e; - qi::_r1_type _r1; qi::_val_type _val; qi::eps_type eps; using phoenix::new_; Modified: trunk/FreeOrion/parse/EffectParser2.cpp =================================================================== --- trunk/FreeOrion/parse/EffectParser2.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/EffectParser2.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -16,20 +16,14 @@ struct effect_parser_rules_2 { effect_parser_rules_2() { qi::_1_type _1; - qi::_2_type _2; - qi::_3_type _3; - qi::_4_type _4; qi::_a_type _a; qi::_b_type _b; qi::_c_type _c; qi::_d_type _d; - qi::_e_type _e; qi::_r1_type _r1; qi::_val_type _val; qi::eps_type eps; using phoenix::new_; - using phoenix::construct; - using phoenix::push_back; const parse::lexer& tok = parse::lexer::instance(); Modified: trunk/FreeOrion/parse/EffectParser3.cpp =================================================================== --- trunk/FreeOrion/parse/EffectParser3.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/EffectParser3.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -16,20 +16,10 @@ struct effect_parser_rules_3 { effect_parser_rules_3() { qi::_1_type _1; - qi::_2_type _2; - qi::_3_type _3; - qi::_4_type _4; qi::_a_type _a; qi::_b_type _b; - qi::_c_type _c; - qi::_d_type _d; - qi::_e_type _e; - qi::_r1_type _r1; qi::_val_type _val; - qi::eps_type eps; using phoenix::new_; - using phoenix::construct; - using phoenix::push_back; const parse::lexer& tok = parse::lexer::instance(); Modified: trunk/FreeOrion/parse/EffectParser4.cpp =================================================================== --- trunk/FreeOrion/parse/EffectParser4.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/EffectParser4.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -16,15 +16,9 @@ struct effect_parser_rules_4 { effect_parser_rules_4() { qi::_1_type _1; - qi::_2_type _2; - qi::_3_type _3; - qi::_4_type _4; qi::_a_type _a; qi::_b_type _b; qi::_c_type _c; - qi::_d_type _d; - qi::_e_type _e; - qi::_r1_type _r1; qi::_val_type _val; qi::eps_type eps; using phoenix::new_; @@ -106,16 +100,6 @@ ) ; - string_and_string_ref // TODO: Try to make this simpler. - = parse::label(Tag_name) >> tok.string [ _a = _1 ] - >> parse::label(Data_name) >> string_value_ref [ _val = construct<string_and_string_ref_pair>(_a, _1) ] - ; - - string_and_string_ref_vector - = '[' >> *string_and_string_ref [ push_back(_val, _1) ] >> ']' - | string_and_string_ref [ push_back(_val, _1) ] - ; - start = create_planet | create_building @@ -199,21 +183,6 @@ parse::skipper_type > generate_sitrep_message_rule; - typedef std::pair<std::string, const ValueRef::ValueRefBase<std::string>*> string_and_string_ref_pair; - - typedef boost::spirit::qi::rule< - parse::token_iterator, - string_and_string_ref_pair (), - qi::locals<std::string>, // TODO: Consider making this an adobe::name_t, and removing the quotes in the script source files. - parse::skipper_type - > string_and_string_ref_rule; - - typedef boost::spirit::qi::rule< - parse::token_iterator, - std::vector<string_and_string_ref_pair> (), - parse::skipper_type - > string_and_string_ref_vector_rule; - create_planet_rule create_planet; parse::effect_parser_rule create_building; string_and_intref_and_intref_rule create_ship_1; @@ -222,8 +191,6 @@ string_and_intref_and_intref_rule create_ship_4; string_and_doubleref_rule create_field; create_system_rule create_system; - string_and_string_ref_rule string_and_string_ref; - string_and_string_ref_vector_rule string_and_string_ref_vector; parse::effect_parser_rule start; }; } Modified: trunk/FreeOrion/parse/FieldsParser.cpp =================================================================== --- trunk/FreeOrion/parse/FieldsParser.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/FieldsParser.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -46,11 +46,7 @@ qi::_e_type _e; qi::_f_type _f; qi::_r1_type _r1; - //qi::_r2_type _r2; - //qi::_val_type _val; - qi::eps_type eps; using phoenix::new_; - using phoenix::push_back; field = tok.FieldType_ Modified: trunk/FreeOrion/parse/KeymapParser.cpp =================================================================== --- trunk/FreeOrion/parse/KeymapParser.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/KeymapParser.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -52,10 +52,7 @@ qi::_a_type _a; qi::_b_type _b; qi::_r1_type _r1; - qi::_r1_type _r2; using phoenix::construct; - using phoenix::clear; - qi::eps_type eps; int_pair = tok.int_ [ _a = _1 ] >> tok.int_ [ _b = _1 ] Modified: trunk/FreeOrion/parse/MonsterFleetPlansParser.cpp =================================================================== --- trunk/FreeOrion/parse/MonsterFleetPlansParser.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/MonsterFleetPlansParser.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -41,7 +41,6 @@ qi::_val_type _val; qi::eps_type eps; using phoenix::clear; - using phoenix::new_; using phoenix::push_back; monster_fleet_plan_prefix Modified: trunk/FreeOrion/parse/PlanetEnvironmentValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/PlanetEnvironmentValueRefParser.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/PlanetEnvironmentValueRefParser.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -11,7 +11,6 @@ qi::_val_type _val; using phoenix::new_; using phoenix::push_back; - using phoenix::static_cast_; const parse::lexer& tok = parse::lexer::instance(); Modified: trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -11,7 +11,6 @@ qi::_val_type _val; using phoenix::new_; using phoenix::push_back; - using phoenix::static_cast_; const parse::lexer& tok = parse::lexer::instance(); Modified: trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -11,7 +11,6 @@ qi::_val_type _val; using phoenix::new_; using phoenix::push_back; - using phoenix::static_cast_; const parse::lexer& tok = parse::lexer::instance(); Modified: trunk/FreeOrion/parse/SpecialsParser.cpp =================================================================== --- trunk/FreeOrion/parse/SpecialsParser.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/SpecialsParser.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -49,7 +49,6 @@ qi::_g_type _g; qi::_r1_type _r1; qi::_r2_type _r2; - //qi::_val_type _val; qi::eps_type eps; using phoenix::new_; Modified: trunk/FreeOrion/parse/StarTypeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/StarTypeValueRefParser.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/StarTypeValueRefParser.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -11,7 +11,6 @@ qi::_val_type _val; using phoenix::new_; using phoenix::push_back; - using phoenix::static_cast_; const parse::lexer& tok = parse::lexer::instance(); Modified: trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp 2013-06-08 17:13:42 UTC (rev 6128) +++ trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp 2013-06-08 18:08:22 UTC (rev 6129) @@ -11,7 +11,6 @@ qi::_val_type _val; using phoenix::new_; using phoenix::push_back; - using phoenix::static_cast_; const parse::lexer& tok = parse::lexer::instance(); |
From: <mar...@us...> - 2013-08-06 09:08:36
|
Revision: 6301 http://sourceforge.net/p/freeorion/code/6301 Author: marcel_metz Date: 2013-08-06 09:08:34 +0000 (Tue, 06 Aug 2013) Log Message: ----------- Moved parse test python utility scripts into test directory. Added Paths: ----------- trunk/FreeOrion/parse/test/generate_error_prefixes.py trunk/FreeOrion/parse/test/permute_labels.py Removed Paths: ------------- trunk/FreeOrion/parse/generate_error_prefixes.py trunk/FreeOrion/parse/permute_labels.py Deleted: trunk/FreeOrion/parse/generate_error_prefixes.py =================================================================== --- trunk/FreeOrion/parse/generate_error_prefixes.py 2013-08-06 09:08:27 UTC (rev 6300) +++ trunk/FreeOrion/parse/generate_error_prefixes.py 2013-08-06 09:08:34 UTC (rev 6301) @@ -1,25 +0,0 @@ -#!/usr/bin/python - -# This script expects the output of "parser_test lexer -f <file>" as its -# input. Its output is all unique token prefixes of the lines in the input. - -import sys - -lines = open(sys.argv[1]).readlines() - -all_partial_lines = set([]) -partial_line = "" -for i in range(0, len(lines)): - line = lines[i] - if "Successful parse." in line: - partial_line = "" - elif "All parses successful." in line: - pass - else: - if len(partial_line) == 0: - partial_line = line[0:-1] - else: - partial_line += ' ' + line[0:-1] - if not "Successful parse." in lines[i + 1] and not "All parses successful." in lines[i + 1] and not partial_line in all_partial_lines: - print partial_line - all_partial_lines.add(partial_line) Deleted: trunk/FreeOrion/parse/permute_labels.py =================================================================== --- trunk/FreeOrion/parse/permute_labels.py 2013-08-06 09:08:27 UTC (rev 6300) +++ trunk/FreeOrion/parse/permute_labels.py 2013-08-06 09:08:34 UTC (rev 6301) @@ -1,33 +0,0 @@ -#!/usr/bin/python - -import sys -import re - -regex = re.compile(r'(\S+) +(=)( +)') -filename = sys.argv[1] - -lines = open(filename).readlines() - -for line in lines: - line_copy = line[0:-1] - cut_ranges = [] - for match in regex.finditer(line_copy): - cut_ranges.append((match.start(1), match.start(3))) - if len(cut_ranges): - for i in range(0, 2 ** len(cut_ranges)): - line_copy = line[0:cut_ranges[0][0]] - k = 2 ** (len(cut_ranges) - 1) - for j in range(0, len(cut_ranges) - 1): - if not ((i / k) % 2): - line_copy += line[cut_ranges[j][0]:cut_ranges[j][1]] - line_copy += line[cut_ranges[j][1]:cut_ranges[j + 1][0]] - k = k / 2 - if not ((i / k) % 2): - line_copy += line[cut_ranges[-1][0]:cut_ranges[-1][1]] - line_copy += line[cut_ranges[-1][1]:-1] - line_copy = re.sub(r' +', r' ', line_copy) - line_copy = re.sub(r'= +', r'= ', line_copy) - print line_copy - else: - print line_copy - Copied: trunk/FreeOrion/parse/test/generate_error_prefixes.py (from rev 6300, trunk/FreeOrion/parse/generate_error_prefixes.py) =================================================================== --- trunk/FreeOrion/parse/test/generate_error_prefixes.py (rev 0) +++ trunk/FreeOrion/parse/test/generate_error_prefixes.py 2013-08-06 09:08:34 UTC (rev 6301) @@ -0,0 +1,25 @@ +#!/usr/bin/python + +# This script expects the output of "parser_test lexer -f <file>" as its +# input. Its output is all unique token prefixes of the lines in the input. + +import sys + +lines = open(sys.argv[1]).readlines() + +all_partial_lines = set([]) +partial_line = "" +for i in range(0, len(lines)): + line = lines[i] + if "Successful parse." in line: + partial_line = "" + elif "All parses successful." in line: + pass + else: + if len(partial_line) == 0: + partial_line = line[0:-1] + else: + partial_line += ' ' + line[0:-1] + if not "Successful parse." in lines[i + 1] and not "All parses successful." in lines[i + 1] and not partial_line in all_partial_lines: + print partial_line + all_partial_lines.add(partial_line) Copied: trunk/FreeOrion/parse/test/permute_labels.py (from rev 6300, trunk/FreeOrion/parse/permute_labels.py) =================================================================== --- trunk/FreeOrion/parse/test/permute_labels.py (rev 0) +++ trunk/FreeOrion/parse/test/permute_labels.py 2013-08-06 09:08:34 UTC (rev 6301) @@ -0,0 +1,33 @@ +#!/usr/bin/python + +import sys +import re + +regex = re.compile(r'(\S+) +(=)( +)') +filename = sys.argv[1] + +lines = open(filename).readlines() + +for line in lines: + line_copy = line[0:-1] + cut_ranges = [] + for match in regex.finditer(line_copy): + cut_ranges.append((match.start(1), match.start(3))) + if len(cut_ranges): + for i in range(0, 2 ** len(cut_ranges)): + line_copy = line[0:cut_ranges[0][0]] + k = 2 ** (len(cut_ranges) - 1) + for j in range(0, len(cut_ranges) - 1): + if not ((i / k) % 2): + line_copy += line[cut_ranges[j][0]:cut_ranges[j][1]] + line_copy += line[cut_ranges[j][1]:cut_ranges[j + 1][0]] + k = k / 2 + if not ((i / k) % 2): + line_copy += line[cut_ranges[-1][0]:cut_ranges[-1][1]] + line_copy += line[cut_ranges[-1][1]:-1] + line_copy = re.sub(r' +', r' ', line_copy) + line_copy = re.sub(r'= +', r'= ', line_copy) + print line_copy + else: + print line_copy + |
From: <mar...@us...> - 2013-08-07 08:20:43
|
Revision: 6311 http://sourceforge.net/p/freeorion/code/6311 Author: marcel_metz Date: 2013-08-07 08:20:39 +0000 (Wed, 07 Aug 2013) Log Message: ----------- Renamed some parser variables to make their purpose more clear. * Renamed first_token to variable_scope. * Renamed final_token to variable_name. * Renamed container_token to container_type. Modified Paths: -------------- trunk/FreeOrion/parse/DoubleValueRefParser.cpp trunk/FreeOrion/parse/IntValueRefParser.cpp trunk/FreeOrion/parse/PlanetEnvironmentValueRefParser.cpp trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp trunk/FreeOrion/parse/StarTypeValueRefParser.cpp trunk/FreeOrion/parse/StringValueRefParser.cpp trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp trunk/FreeOrion/parse/ValueRefParserImpl.h Modified: trunk/FreeOrion/parse/DoubleValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2013-08-07 06:48:18 UTC (rev 6310) +++ trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2013-08-07 08:20:39 UTC (rev 6311) @@ -1,10 +1,5 @@ #include "ValueRefParserImpl.h" -//#include "Double.h" - -//extern name_token_rule first_token; // in IntValueRefParser.cpp -//extern name_token_rule container_token; // in IntValueRefParser.cpp - namespace { struct double_parser_rules { double_parser_rules() { @@ -17,7 +12,7 @@ const parse::lexer& tok = parse::lexer::instance(); - final_token + variable_name = tok.Industry_ | tok.TargetIndustry_ | tok.Research_ @@ -63,12 +58,12 @@ variable = ( - first_token [ push_back(_a, _1) ] > '.' - > -(container_token [ push_back(_a, _1) ] > '.') + variable_scope [ push_back(_a, _1) ] > '.' + > -(container_type [ push_back(_a, _1) ] > '.') > ( - final_token + variable_name [ push_back(_a, _1), _val = new_<ValueRef::Variable<double> >(_a) ] - | int_var_final_token() + | int_var_variable_name() [ push_back(_a, _1), _val = new_<ValueRef::StaticCast<int, double> >(new_<ValueRef::Variable<int> >(_a)) ] ) ) @@ -86,7 +81,7 @@ ) ; - initialize_numeric_statistic_parser<double>(statistic, final_token); + initialize_numeric_statistic_parser<double>(statistic, variable_name); initialize_expression_parsers<double>(function_expr, exponential_expr, @@ -107,7 +102,7 @@ | int_statistic ; - final_token.name("real number variable name (e.g., Growth)"); + variable_name.name("real number variable name (e.g., Growth)"); constant.name("real number constant"); @@ -122,7 +117,7 @@ primary_expr.name("real number expression"); #if DEBUG_VALUEREF_PARSERS - debug(final_token); + debug(variable_name); debug(constant); debug(variable); debug(statistic); @@ -140,7 +135,7 @@ typedef statistic_rule<double>::type statistic_rule; typedef expression_rule<double>::type expression_rule; - name_token_rule final_token; + name_token_rule variable_name; rule constant; variable_rule variable; statistic_rule statistic; @@ -159,8 +154,8 @@ } } -const name_token_rule& double_var_final_token() -{ return get_double_parser_rules().final_token; } +const name_token_rule& double_var_variable_name() +{ return get_double_parser_rules().variable_name; } const statistic_rule<double>::type& double_var_statistic() { return get_double_parser_rules().statistic; } Modified: trunk/FreeOrion/parse/IntValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/IntValueRefParser.cpp 2013-08-07 06:48:18 UTC (rev 6310) +++ trunk/FreeOrion/parse/IntValueRefParser.cpp 2013-08-07 08:20:39 UTC (rev 6311) @@ -1,8 +1,8 @@ #include "ValueRefParserImpl.h" -name_token_rule first_token; -name_token_rule container_token; +name_token_rule variable_scope; +name_token_rule container_type; namespace { struct int_parser_rules { @@ -16,23 +16,23 @@ const parse::lexer& tok = parse::lexer::instance(); - first_token + variable_scope = tok.Source_ | tok.Target_ | tok.LocalCandidate_ | tok.RootCandidate_ ; - container_token + container_type = tok.Planet_ | tok.System_ | tok.Fleet_ ; // TODO: Should we apply elements of this list only to certain - // containers? For example, if one writes "Source.Planet.", + // objects? For example, if one writes "Source.Planet.", // "NumShips" should not follow. - final_token + variable_name = tok.Owner_ | tok.ID_ | tok.CreationTurn_ @@ -59,9 +59,9 @@ variable = ( ( - first_token [ push_back(_a, _1) ] > '.' - > -(container_token [ push_back(_a, _1) ] > '.') - > final_token [ push_back(_a, _1) ] + variable_scope [ push_back(_a, _1) ] > '.' + > -(container_type [ push_back(_a, _1) ] > '.') + > variable_name [ push_back(_a, _1) ] ) | ( tok.CurrentTurn_ @@ -73,7 +73,7 @@ [ _val = new_<ValueRef::Variable<int> >(_a) ] ; - initialize_numeric_statistic_parser<int>(statistic, final_token); + initialize_numeric_statistic_parser<int>(statistic, variable_name); initialize_expression_parsers<int>(function_expr, exponential_expr, @@ -89,9 +89,9 @@ | statistic ; - first_token.name("Source, Target, LocalCandidate, or RootCandidate"); - container_token.name("Planet, System, or Fleet"); - final_token.name("integer variable name (e.g., FleetID)"); + variable_scope.name("Source, Target, LocalCandidate, or RootCandidate"); + container_type.name("Planet, System, or Fleet"); + variable_name.name("integer variable name (e.g., FleetID)"); constant.name("integer constant"); variable.name("integer variable"); statistic.name("integer statistic"); @@ -104,9 +104,9 @@ primary_expr.name("integer expression"); #if DEBUG_VALUEREF_PARSERS - debug(first_token); - debug(container_token); - debug(final_token); + debug(variable_scope); + debug(container_type); + debug(variable_name); debug(constant); debug(variable); debug(statistic); @@ -123,7 +123,7 @@ typedef statistic_rule<int>::type statistic_rule; typedef expression_rule<int>::type expression_rule; - name_token_rule final_token; + name_token_rule variable_name; rule constant; variable_rule variable; statistic_rule statistic; @@ -142,8 +142,8 @@ } } -const name_token_rule& int_var_final_token() -{ return get_int_parser_rules().final_token; } +const name_token_rule& int_var_variable_name() +{ return get_int_parser_rules().variable_name; } const statistic_rule<int>::type& int_var_statistic() { return get_int_parser_rules().statistic; } Modified: trunk/FreeOrion/parse/PlanetEnvironmentValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/PlanetEnvironmentValueRefParser.cpp 2013-08-07 06:48:18 UTC (rev 6310) +++ trunk/FreeOrion/parse/PlanetEnvironmentValueRefParser.cpp 2013-08-07 08:20:39 UTC (rev 6311) @@ -14,7 +14,7 @@ const parse::lexer& tok = parse::lexer::instance(); - final_token + variable_name %= tok.PlanetEnvironment_ ; @@ -23,12 +23,12 @@ ; variable - = first_token [ push_back(_a, _1) ] > '.' - > -(container_token [ push_back(_a, _1) ] > '.') - > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<PlanetEnvironment> >(_a) ] + = variable_scope [ push_back(_a, _1) ] > '.' + > -(container_type [ push_back(_a, _1) ] > '.') + > variable_name [ push_back(_a, _1), _val = new_<ValueRef::Variable<PlanetEnvironment> >(_a) ] ; - initialize_nonnumeric_statistic_parser<PlanetEnvironment>(statistic, final_token); + initialize_nonnumeric_statistic_parser<PlanetEnvironment>(statistic, variable_name); primary_expr %= constant @@ -36,14 +36,14 @@ | statistic ; - final_token.name("PlanetEnvironment variable name (e.g., PlanetEnvironment)"); + variable_name.name("PlanetEnvironment variable name (e.g., PlanetEnvironment)"); constant.name("PlanetEnvironment"); variable.name("PlanetEnvironment variable"); statistic.name("PlanetEnvironment statistic"); primary_expr.name("PlanetEnvironment expression"); #if DEBUG_VALUEREF_PARSERS - debug(final_token); + debug(variable_name); debug(constant); debug(variable); debug(statistic); @@ -55,7 +55,7 @@ typedef variable_rule<PlanetEnvironment>::type variable_rule; typedef statistic_rule<PlanetEnvironment>::type statistic_rule; - name_token_rule final_token; + name_token_rule variable_name; rule constant; variable_rule variable; statistic_rule statistic; Modified: trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp 2013-08-07 06:48:18 UTC (rev 6310) +++ trunk/FreeOrion/parse/PlanetSizeValueRefParser.cpp 2013-08-07 08:20:39 UTC (rev 6311) @@ -14,7 +14,7 @@ const parse::lexer& tok = parse::lexer::instance(); - final_token + variable_name %= tok.PlanetSize_ | tok.NextLargerPlanetSize_ | tok.NextSmallerPlanetSize_ @@ -25,12 +25,12 @@ ; variable - = first_token [ push_back(_a, _1) ] > '.' - > -(container_token [ push_back(_a, _1) ] > '.') - > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<PlanetSize> >(_a) ] + = variable_scope [ push_back(_a, _1) ] > '.' + > -(container_type [ push_back(_a, _1) ] > '.') + > variable_name [ push_back(_a, _1), _val = new_<ValueRef::Variable<PlanetSize> >(_a) ] ; - initialize_nonnumeric_statistic_parser<PlanetSize>(statistic, final_token); + initialize_nonnumeric_statistic_parser<PlanetSize>(statistic, variable_name); primary_expr %= constant @@ -38,14 +38,14 @@ | statistic ; - final_token.name("PlanetSize variable name (e.g., PlanetSize)"); + variable_name.name("PlanetSize variable name (e.g., PlanetSize)"); constant.name("PlanetSize"); variable.name("PlanetSize variable"); statistic.name("PlanetSize statistic"); primary_expr.name("PlanetSize expression"); #if DEBUG_VALUEREF_PARSERS - debug(final_token); + debug(variable_name); debug(constant); debug(variable); debug(statistic); @@ -57,7 +57,7 @@ typedef variable_rule<PlanetSize>::type variable_rule; typedef statistic_rule<PlanetSize>::type statistic_rule; - name_token_rule final_token; + name_token_rule variable_name; rule constant; variable_rule variable; statistic_rule statistic; Modified: trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp 2013-08-07 06:48:18 UTC (rev 6310) +++ trunk/FreeOrion/parse/PlanetTypeValueRefParser.cpp 2013-08-07 08:20:39 UTC (rev 6311) @@ -14,7 +14,7 @@ const parse::lexer& tok = parse::lexer::instance(); - final_token + variable_name %= tok.PlanetType_ | tok.OriginalType_ | tok.NextCloserToOriginalPlanetType_ @@ -28,12 +28,12 @@ ; variable - = first_token [ push_back(_a, _1) ] > '.' - > -(container_token [ push_back(_a, _1) ] > '.') - > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<PlanetType> >(_a) ] + = variable_scope [ push_back(_a, _1) ] > '.' + > -(container_type [ push_back(_a, _1) ] > '.') + > variable_name [ push_back(_a, _1), _val = new_<ValueRef::Variable<PlanetType> >(_a) ] ; - initialize_nonnumeric_statistic_parser<PlanetType>(statistic, final_token); + initialize_nonnumeric_statistic_parser<PlanetType>(statistic, variable_name); primary_expr %= constant @@ -41,14 +41,14 @@ | statistic ; - final_token.name("PlanetType variable name (e.g., PlanetType)"); + variable_name.name("PlanetType variable name (e.g., PlanetType)"); constant.name("PlanetType"); variable.name("PlanetType variable"); statistic.name("PlanetType statistic"); primary_expr.name("PlanetType expression"); #if DEBUG_VALUEREF_PARSERS - debug(final_token); + debug(variable_name); debug(constant); debug(variable); debug(statistic); @@ -60,7 +60,7 @@ typedef variable_rule<PlanetType>::type variable_rule; typedef statistic_rule<PlanetType>::type statistic_rule; - name_token_rule final_token; + name_token_rule variable_name; rule constant; variable_rule variable; statistic_rule statistic; Modified: trunk/FreeOrion/parse/StarTypeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/StarTypeValueRefParser.cpp 2013-08-07 06:48:18 UTC (rev 6310) +++ trunk/FreeOrion/parse/StarTypeValueRefParser.cpp 2013-08-07 08:20:39 UTC (rev 6311) @@ -14,7 +14,7 @@ const parse::lexer& tok = parse::lexer::instance(); - final_token + variable_name %= tok.StarType_ | tok.NextOlderStarType_ | tok.NextYoungerStarType_ @@ -25,12 +25,12 @@ ; variable - = first_token [ push_back(_a, _1) ] > '.' - > -(container_token [ push_back(_a, _1) ] > '.') - > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<StarType> >(_a) ] + = variable_scope [ push_back(_a, _1) ] > '.' + > -(container_type [ push_back(_a, _1) ] > '.') + > variable_name [ push_back(_a, _1), _val = new_<ValueRef::Variable<StarType> >(_a) ] ; - initialize_nonnumeric_statistic_parser<StarType>(statistic, final_token); + initialize_nonnumeric_statistic_parser<StarType>(statistic, variable_name); primary_expr %= constant @@ -38,14 +38,14 @@ | statistic ; - final_token.name("StarType variable name (e.g., StarType)"); + variable_name.name("StarType variable name (e.g., StarType)"); constant.name("StarType"); variable.name("StarType variable"); statistic.name("StarType statistic"); primary_expr.name("StarType expression"); #if DEBUG_VALUEREF_PARSERS - debug(final_token); + debug(variable_name); debug(constant); debug(variable); debug(statistic); @@ -57,7 +57,7 @@ typedef variable_rule<StarType>::type variable_rule; typedef statistic_rule<StarType>::type statistic_rule; - name_token_rule final_token; + name_token_rule variable_name; rule constant; variable_rule variable; statistic_rule statistic; Modified: trunk/FreeOrion/parse/StringValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/StringValueRefParser.cpp 2013-08-07 06:48:18 UTC (rev 6310) +++ trunk/FreeOrion/parse/StringValueRefParser.cpp 2013-08-07 08:20:39 UTC (rev 6311) @@ -14,7 +14,7 @@ const parse::lexer& tok = parse::lexer::instance(); - final_token + variable_name %= tok.Name_ | tok.Species_ | tok.BuildingType_ @@ -36,14 +36,14 @@ variable = ( - first_token [ push_back(_a, _1) ] > '.' - > -(container_token [ push_back(_a, _1) ] > '.') + variable_scope [ push_back(_a, _1) ] > '.' + > -(container_type [ push_back(_a, _1) ] > '.') > ( - final_token + variable_name [ push_back(_a, _1), _val = new_<ValueRef::Variable<std::string> >(_a) ] - | int_var_final_token() + | int_var_variable_name() [ push_back(_a, _1), _val = new_<ValueRef::StringCast<int> >(new_<ValueRef::Variable<int> >(_a)) ] - | double_var_final_token() + | double_var_variable_name() [ push_back(_a, _1), _val = new_<ValueRef::StringCast<double> >(new_<ValueRef::Variable<double> >(_a)) ] ) ) @@ -53,7 +53,7 @@ ) ; - initialize_nonnumeric_statistic_parser<std::string>(statistic, final_token); + initialize_nonnumeric_statistic_parser<std::string>(statistic, variable_name); int_statistic = int_var_statistic() [ _val = new_<ValueRef::StringCast<int> >(_1) ] @@ -71,7 +71,7 @@ | statistic ; - final_token.name("string variable name (e.g., Name)"); + variable_name.name("string variable name (e.g., Name)"); constant.name("string"); variable.name("string variable"); statistic.name("string statistic"); @@ -80,7 +80,7 @@ expr.name("string expression"); #if DEBUG_VALUEREF_PARSERS - debug(final_token); + debug(variable_name); debug(constant); debug(variable); debug(statistic); @@ -94,7 +94,7 @@ typedef variable_rule<std::string>::type variable_rule; typedef statistic_rule<std::string>::type statistic_rule; - name_token_rule final_token; + name_token_rule variable_name; rule constant; variable_rule variable; statistic_rule statistic; Modified: trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp 2013-08-07 06:48:18 UTC (rev 6310) +++ trunk/FreeOrion/parse/UniverseObjectTypeValueRefParser.cpp 2013-08-07 08:20:39 UTC (rev 6311) @@ -14,7 +14,7 @@ const parse::lexer& tok = parse::lexer::instance(); - final_token + variable_name %= tok.ObjectType_ ; @@ -23,13 +23,13 @@ ; variable - = first_token [ push_back(_a, _1) ] > '.' - > -(container_token [ push_back(_a, _1) ] > '.') - > final_token [ push_back(_a, _1), _val = new_<ValueRef::Variable<UniverseObjectType> >(_a) ] + = variable_scope [ push_back(_a, _1) ] > '.' + > -(container_type [ push_back(_a, _1) ] > '.') + > variable_name [ push_back(_a, _1), _val = new_<ValueRef::Variable<UniverseObjectType> >(_a) ] ; - initialize_nonnumeric_statistic_parser<UniverseObjectType>(statistic, final_token); + initialize_nonnumeric_statistic_parser<UniverseObjectType>(statistic, variable_name); primary_expr %= constant @@ -37,14 +37,14 @@ | statistic ; - final_token.name("ObjectType variable name (e.g., ObjectType)"); + variable_name.name("ObjectType variable name (e.g., ObjectType)"); constant.name("ObjectType"); variable.name("ObjectType variable"); statistic.name("ObjectType statistic"); primary_expr.name("ObjectType expression"); #if DEBUG_VALUEREF_PARSERS - debug(final_token); + debug(variable_name); debug(constant); debug(variable); debug(statistic); @@ -56,7 +56,7 @@ typedef variable_rule<UniverseObjectType>::type variable_rule; typedef statistic_rule<UniverseObjectType>::type statistic_rule; - name_token_rule final_token; + name_token_rule variable_name; rule constant; variable_rule variable; statistic_rule statistic; Modified: trunk/FreeOrion/parse/ValueRefParserImpl.h =================================================================== --- trunk/FreeOrion/parse/ValueRefParserImpl.h 2013-08-07 06:48:18 UTC (rev 6310) +++ trunk/FreeOrion/parse/ValueRefParserImpl.h 2013-08-07 08:20:39 UTC (rev 6311) @@ -180,17 +180,17 @@ ; } -extern name_token_rule first_token; -extern name_token_rule container_token; -const name_token_rule& int_var_final_token(); +extern name_token_rule variable_scope; +extern name_token_rule container_type; +const name_token_rule& int_var_variable_name(); const statistic_rule<int>::type& int_var_statistic(); -const name_token_rule& double_var_final_token(); +const name_token_rule& double_var_variable_name(); const statistic_rule<double>::type& double_var_statistic(); template <typename T> void initialize_numeric_statistic_parser( typename statistic_rule<T>::type& statistic, - const name_token_rule& final_token) + const name_token_rule& variable_name) { const parse::lexer& tok = parse::lexer::instance(); @@ -217,8 +217,8 @@ parse::enum_parser<ValueRef::StatisticType>() [ _b = _1 ] >> parse::label(Property_name) >> eps [ push_back(_a, val(LocalCandidate_name)) ] - >> -(container_token [ push_back(_a, _1) ] >> '.') - >> final_token [ push_back(_a, _1) ] + >> -(container_type [ push_back(_a, _1) ] >> '.') + >> variable_name [ push_back(_a, _1) ] >> parse::label(Condition_name) >> parse::detail::condition_parser [ _c = _1 ] ) ) @@ -229,7 +229,7 @@ template <typename T> void initialize_nonnumeric_statistic_parser( typename statistic_rule<T>::type& statistic, - const name_token_rule& final_token) + const name_token_rule& variable_name) { const parse::lexer& tok = parse::lexer::instance(); @@ -248,8 +248,8 @@ tok.Mode_ [ _b = ValueRef::MODE ] >> parse::label(Property_name) >> eps [ push_back(_a, val(LocalCandidate_name)) ] - >> -(container_token [ push_back(_a, _1) ] > '.') - >> final_token [ push_back(_a, _1) ] + >> -(container_type [ push_back(_a, _1) ] > '.') + >> variable_name [ push_back(_a, _1) ] > parse::label(Condition_name) > parse::detail::condition_parser [ _c = _1 ] ) [ _val = new_<ValueRef::Statistic<T> >(_a, _b, _c) ] |
From: <mar...@us...> - 2013-08-30 06:50:54
|
Revision: 6377 http://sourceforge.net/p/freeorion/code/6377 Author: marcel_metz Date: 2013-08-30 06:50:51 +0000 (Fri, 30 Aug 2013) Log Message: ----------- parse: Moved variable addressing implementation into own file. Modified Paths: -------------- trunk/FreeOrion/parse/CMakeLists.txt trunk/FreeOrion/parse/DoubleValueRefParser.cpp trunk/FreeOrion/parse/IntValueRefParser.cpp trunk/FreeOrion/parse/StringValueRefParser.cpp trunk/FreeOrion/parse/ValueRefParserImpl.h Added Paths: ----------- trunk/FreeOrion/parse/ValueRefParserImpl.cpp Modified: trunk/FreeOrion/parse/CMakeLists.txt =================================================================== --- trunk/FreeOrion/parse/CMakeLists.txt 2013-08-30 06:34:40 UTC (rev 6376) +++ trunk/FreeOrion/parse/CMakeLists.txt 2013-08-30 06:50:51 UTC (rev 6377) @@ -24,6 +24,7 @@ PlanetEnvironmentValueRefParser.cpp UniverseObjectTypeValueRefParser.cpp StarTypeValueRefParser.cpp + ValueRefParserImpl.cpp ConditionParser.cpp ConditionParser1.cpp ConditionParser2.cpp Modified: trunk/FreeOrion/parse/DoubleValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2013-08-30 06:34:40 UTC (rev 6376) +++ trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2013-08-30 06:50:51 UTC (rev 6377) @@ -67,8 +67,8 @@ variable = ( - variable_scope [ push_back(_a, _1) ] > '.' - > -(container_type [ push_back(_a, _1) ] > '.') + variable_scope() [ push_back(_a, _1) ] > '.' + > -(container_type() [ push_back(_a, _1) ] > '.') > ( variable_name [ push_back(_a, _1), _val = new_<ValueRef::Variable<double> >(_a) ] | int_var_variable_name() [ push_back(_a, _1), _val = new_<ValueRef::StaticCast<int, double> >(new_<ValueRef::Variable<int> >(_a)) ] Modified: trunk/FreeOrion/parse/IntValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/IntValueRefParser.cpp 2013-08-30 06:34:40 UTC (rev 6376) +++ trunk/FreeOrion/parse/IntValueRefParser.cpp 2013-08-30 06:50:51 UTC (rev 6377) @@ -1,9 +1,5 @@ #include "ValueRefParserImpl.h" - -name_token_rule variable_scope; -name_token_rule container_type; - namespace { struct int_parser_rules { int_parser_rules() { @@ -16,19 +12,6 @@ const parse::lexer& tok = parse::lexer::instance(); - variable_scope - = tok.Source_ - | tok.Target_ - | tok.LocalCandidate_ - | tok.RootCandidate_ - ; - - container_type - = tok.Planet_ - | tok.System_ - | tok.Fleet_ - ; - // TODO: Should we apply elements of this list only to certain // objects? For example, if one writes "Source.Planet.", // "NumShips" should not follow. @@ -81,8 +64,6 @@ | statistic ; - variable_scope.name("Source, Target, LocalCandidate, or RootCandidate"); - container_type.name("Planet, System, or Fleet"); variable_name.name("integer variable name (e.g., FleetID)"); constant.name("integer constant"); free_variable.name("free integer variable"); @@ -96,8 +77,6 @@ primary_expr.name("integer expression"); #if DEBUG_VALUEREF_PARSERS - debug(variable_scope); - debug(container_type); debug(variable_name); debug(constant); debug(free_variable); Modified: trunk/FreeOrion/parse/StringValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/StringValueRefParser.cpp 2013-08-30 06:34:40 UTC (rev 6376) +++ trunk/FreeOrion/parse/StringValueRefParser.cpp 2013-08-30 06:50:51 UTC (rev 6377) @@ -38,8 +38,8 @@ = tok.Value_ [ push_back(_a, _1), _val = new_<ValueRef::Variable<std::string> >(_a) ] ; variable = ( - variable_scope [ push_back(_a, _1) ] > '.' - > -(container_type [ push_back(_a, _1) ] > '.') + variable_scope() [ push_back(_a, _1) ] > '.' + > -(container_type() [ push_back(_a, _1) ] > '.') > ( variable_name [ push_back(_a, _1), _val = new_<ValueRef::Variable<std::string> >(_a) ] Added: trunk/FreeOrion/parse/ValueRefParserImpl.cpp =================================================================== --- trunk/FreeOrion/parse/ValueRefParserImpl.cpp (rev 0) +++ trunk/FreeOrion/parse/ValueRefParserImpl.cpp 2013-08-30 06:50:51 UTC (rev 6377) @@ -0,0 +1,44 @@ +#include "ValueRefParserImpl.h" + +namespace { + struct variable_parser_rules { + variable_parser_rules() { + const parse::lexer& tok = parse::lexer::instance(); + + variable_scope + = tok.Source_ + | tok.Target_ + | tok.LocalCandidate_ + | tok.RootCandidate_ + ; + + container_type + = tok.Planet_ + | tok.System_ + | tok.Fleet_ + ; + + variable_scope.name("Source, Target, LocalCandidate, or RootCandidate"); + container_type.name("Planet, System, or Fleet"); + +#if DEBUG_VALUEREF_PARSERS + debug(variable_scope); + debug(container_type); +#endif + } + + name_token_rule variable_scope; + name_token_rule container_type; + }; + + variable_parser_rules& get_variable_parser_rules() { + static variable_parser_rules retval; + return retval; + } +} + +const name_token_rule& variable_scope() +{ return get_variable_parser_rules().variable_scope; } + +const name_token_rule& container_type() +{ return get_variable_parser_rules().container_type; } Modified: trunk/FreeOrion/parse/ValueRefParserImpl.h =================================================================== --- trunk/FreeOrion/parse/ValueRefParserImpl.h 2013-08-30 06:34:40 UTC (rev 6376) +++ trunk/FreeOrion/parse/ValueRefParserImpl.h 2013-08-30 06:50:51 UTC (rev 6377) @@ -180,8 +180,8 @@ ; } -extern name_token_rule variable_scope; -extern name_token_rule container_type; +const name_token_rule& variable_scope(); +const name_token_rule& container_type(); const name_token_rule& int_var_variable_name(); const statistic_rule<int>::type& int_var_statistic(); const name_token_rule& double_var_variable_name(); @@ -199,9 +199,9 @@ using phoenix::push_back; bound_variable - = variable_scope [ push_back(_a, _1) ] > '.' - > -(container_type [ push_back(_a, _1) ] > '.') - > variable_name [ push_back(_a, _1), _val = new_<ValueRef::Variable<T> >(_a) ] + = variable_scope() [ push_back(_a, _1) ] > '.' + > -(container_type() [ push_back(_a, _1) ] > '.') + > variable_name [ push_back(_a, _1), _val = new_<ValueRef::Variable<T> >(_a) ] ; } @@ -235,7 +235,7 @@ parse::enum_parser<ValueRef::StatisticType>() [ _b = _1 ] >> parse::label(Property_token) >> eps [ push_back(_a, val(LocalCandidate_token)) ] - >> -(container_type [ push_back(_a, _1) ] >> '.') + >> -(container_type() [ push_back(_a, _1) ] >> '.') >> variable_name [ push_back(_a, _1) ] >> parse::label(Condition_token) >> parse::detail::condition_parser [ _c = _1 ] ) @@ -266,7 +266,7 @@ tok.Mode_ [ _b = ValueRef::MODE ] >> parse::label(Property_token) >> eps [ push_back(_a, val(LocalCandidate_token)) ] - >> -(container_type [ push_back(_a, _1) ] > '.') + >> -(container_type() [ push_back(_a, _1) ] > '.') >> variable_name [ push_back(_a, _1) ] > parse::label(Condition_token) > parse::detail::condition_parser [ _c = _1 ] ) |
From: <geo...@us...> - 2014-02-14 18:38:45
|
Revision: 6901 http://sourceforge.net/p/freeorion/code/6901 Author: geoffthemedio Date: 2014-02-14 18:38:41 +0000 (Fri, 14 Feb 2014) Log Message: ----------- -Disambiguation of phoenix::bind calls by cami. Also: -Commented out DistanceToSource ValueRef due to unsupported ambiguity of reference type. -Grooming / commenting. Modified Paths: -------------- trunk/FreeOrion/parse/DoubleValueRefParser.cpp trunk/FreeOrion/parse/IntValueRefParser.cpp trunk/FreeOrion/parse/StringValueRefParser.cpp trunk/FreeOrion/parse/ValueRefParserImpl.h Modified: trunk/FreeOrion/parse/DoubleValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2014-02-14 16:09:30 UTC (rev 6900) +++ trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2014-02-14 18:38:41 UTC (rev 6901) @@ -7,7 +7,6 @@ qi::_a_type _a; qi::_b_type _b; qi::_val_type _val; - using phoenix::bind; using phoenix::construct; using phoenix::new_; using phoenix::push_back; @@ -45,7 +44,7 @@ | tok.BattleSpeed_ | tok.StarlaneSpeed_ | tok.TradeStockpile_ - | tok.DistanceToSource_ + //| tok.DistanceToSource_ // Note: DistanceToSource will be a Source-variant property, but without an explicit Source reference, so will be treated as Source-invariant by ValueRef and parsing code. This is bad. | tok.X_ | tok.Y_ | tok.SizeAsDouble_ @@ -61,27 +60,31 @@ free_variable = - tok.Value_ [ _val = new_<ValueRef::Variable<double> >(ValueRef::EFFECT_TARGET_VALUE_REFERENCE, _a) ] - | + tok.Value_ [ _val = new_<ValueRef::Variable<double> >(ValueRef::EFFECT_TARGET_VALUE_REFERENCE, _a) ] + | ( tok.UniverseCentreX_ | tok.UniverseCentreY_ // add more object-independent ValueRef int functions here - ) [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::Variable<double> >(ValueRef::NON_OBJECT_REFERENCE, _a) ] + ) [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))), + _val = new_<ValueRef::Variable<double> >(ValueRef::NON_OBJECT_REFERENCE, _a) ] ; variable = ( - variable_scope() [ _b = _1 ] > '.' - > -(container_type() [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))) ] > '.') + variable_scope() [ _b = _1 ] > '.' // determines reference type from explicit use of Source, Target, LocalCandiate, or RootCandidate in expression + > -(container_type() [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))) ] > '.') > ( - variable_name [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::Variable<double> >(_b, _a) ] - | int_var_variable_name() [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::StaticCast<int, double> >(new_<ValueRef::Variable<int> >(_b, _a)) ] + variable_name [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))), + _val = new_<ValueRef::Variable<double> >(_b, _a) ] + | int_var_variable_name() [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))), + _val = new_<ValueRef::StaticCast<int, double> >(new_<ValueRef::Variable<int> >(_b, _a)) ] ) ) | ( tok.CurrentTurn_ - [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::StaticCast<int, double> >(new_<ValueRef::Variable<int> >(ValueRef::NON_OBJECT_REFERENCE, _a)) ] + [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))), + _val = new_<ValueRef::StaticCast<int, double> >(new_<ValueRef::Variable<int> >(ValueRef::NON_OBJECT_REFERENCE, _a)) ] ) ; Modified: trunk/FreeOrion/parse/IntValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/IntValueRefParser.cpp 2014-02-14 16:09:30 UTC (rev 6900) +++ trunk/FreeOrion/parse/IntValueRefParser.cpp 2014-02-14 18:38:41 UTC (rev 6901) @@ -6,7 +6,6 @@ qi::_1_type _1; qi::_a_type _a; qi::_val_type _val; - using phoenix::bind; using phoenix::construct; using phoenix::new_; using phoenix::push_back; @@ -44,7 +43,7 @@ // add more object-independent ValueRef int functions here free_variable - = tok.CurrentTurn_ [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::Variable<int> >(ValueRef::NON_OBJECT_REFERENCE, _a) ] + = tok.CurrentTurn_ [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::Variable<int> >(ValueRef::NON_OBJECT_REFERENCE, _a) ] | tok.Value_ [ _val = new_<ValueRef::Variable<int> >(ValueRef::EFFECT_TARGET_VALUE_REFERENCE, _a) ] ; Modified: trunk/FreeOrion/parse/StringValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/StringValueRefParser.cpp 2014-02-14 16:09:30 UTC (rev 6900) +++ trunk/FreeOrion/parse/StringValueRefParser.cpp 2014-02-14 18:38:41 UTC (rev 6901) @@ -10,7 +10,6 @@ qi::_b_type _b; qi::_val_type _val; qi::as_string_type as_string; - using phoenix::bind; using phoenix::construct; using phoenix::push_back; using phoenix::new_; @@ -45,20 +44,20 @@ free_variable = tok.Value_ [ _val = new_<ValueRef::Variable<std::string> >(ValueRef::EFFECT_TARGET_VALUE_REFERENCE, _a) ] - | tok.CurrentTurn_ [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::StringCast<int> >(new_<ValueRef::Variable<int> >(ValueRef::NON_OBJECT_REFERENCE, _a)) ] + | tok.CurrentTurn_ [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::StringCast<int> >(new_<ValueRef::Variable<int> >(ValueRef::NON_OBJECT_REFERENCE, _a)) ] ; variable = ( variable_scope() [ _b = _1 ] > '.' - > -(container_type() [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))) ] > '.') + > -(container_type() [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))) ] > '.') > ( variable_name - [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::Variable<std::string> >(_b, _a) ] + [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::Variable<std::string> >(_b, _a) ] | int_var_variable_name() - [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::StringCast<int> >(new_<ValueRef::Variable<int> >(_b, _a)) ] + [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::StringCast<int> >(new_<ValueRef::Variable<int> >(_b, _a)) ] | double_var_variable_name() - [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::StringCast<double> >(new_<ValueRef::Variable<double> >(_b, _a)) ] + [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::StringCast<double> >(new_<ValueRef::Variable<double> >(_b, _a)) ] ) ) ; Modified: trunk/FreeOrion/parse/ValueRefParserImpl.h =================================================================== --- trunk/FreeOrion/parse/ValueRefParserImpl.h 2014-02-14 16:09:30 UTC (rev 6900) +++ trunk/FreeOrion/parse/ValueRefParserImpl.h 2014-02-14 18:38:41 UTC (rev 6901) @@ -205,15 +205,14 @@ qi::_a_type _a; qi::_b_type _b; qi::_val_type _val; - using phoenix::bind; using phoenix::construct; using phoenix::new_; using phoenix::push_back; bound_variable = variable_scope() [ _b = _1 ] > '.' - > -(container_type() [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))) ] > '.') - > variable_name [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::Variable<T> >(_b, _a) ] + > -(container_type() [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))) ] > '.') + > variable_name [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))), _val = new_<ValueRef::Variable<T> >(_b, _a) ] ; } @@ -230,7 +229,6 @@ qi::_c_type _c; qi::_val_type _val; qi::eps_type eps; - using phoenix::bind; using phoenix::construct; using phoenix::new_; using phoenix::push_back; @@ -248,8 +246,8 @@ | ( parse::enum_parser<ValueRef::StatisticType>() [ _b = _1 ] >> parse::label(Property_token) - >> -(container_type() [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))) ] >> '.') - >> variable_name [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))) ] + >> -(container_type() [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))) ] >> '.') + >> variable_name [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))) ] >> parse::label(Condition_token) >> parse::detail::condition_parser [ _c = _1 ] ) ) @@ -270,7 +268,6 @@ qi::_c_type _c; qi::_val_type _val; qi::eps_type eps; - using phoenix::bind; using phoenix::construct; using phoenix::new_; using phoenix::push_back; @@ -280,8 +277,8 @@ = ( tok.Mode_ [ _b = ValueRef::MODE ] >> parse::label(Property_token) - >> -(container_type() [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))) ] > '.') - >> variable_name [ push_back(_a, construct<std::string>(bind(&adobe::name_t::c_str, _1))) ] + >> -(container_type() [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))) ] > '.') + >> variable_name [ push_back(_a, construct<std::string>(phoenix::bind(&adobe::name_t::c_str, _1))) ] > parse::label(Condition_token) > parse::detail::condition_parser [ _c = _1 ] ) [ _val = new_<ValueRef::Statistic<T> >(_a, _b, _c) ] |
From: <geo...@us...> - 2014-06-07 12:59:34
|
Revision: 7143 http://sourceforge.net/p/freeorion/code/7143 Author: geoffthemedio Date: 2014-06-07 12:59:26 +0000 (Sat, 07 Jun 2014) Log Message: ----------- Prep for parsing complex variable valuerefs. Modified Paths: -------------- trunk/FreeOrion/parse/DoubleValueRefParser.cpp trunk/FreeOrion/parse/IntValueRefParser.cpp trunk/FreeOrion/parse/Tokens.h trunk/FreeOrion/parse/ValueRefParserImpl.h Modified: trunk/FreeOrion/parse/DoubleValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2014-06-07 08:40:00 UTC (rev 7142) +++ trunk/FreeOrion/parse/DoubleValueRefParser.cpp 2014-06-07 12:59:26 UTC (rev 7143) @@ -89,6 +89,7 @@ ; initialize_numeric_statistic_parser<double>(statistic, variable_name); + initialize_complex_parser<double>(complex_variable, variable_name); initialize_expression_parsers<double>(function_expr, exponential_expr, multiplicative_expr, @@ -142,6 +143,7 @@ typedef parse::value_ref_parser_rule<double>::type rule; typedef variable_rule<double>::type variable_rule; typedef statistic_rule<double>::type statistic_rule; + typedef complex_variable_rule<double>::type complex_rule; typedef expression_rule<double>::type expression_rule; name_token_rule variable_name; @@ -150,6 +152,7 @@ variable_rule variable; statistic_rule statistic; rule int_statistic; + complex_rule complex_variable; expression_rule function_expr; expression_rule exponential_expr; expression_rule multiplicative_expr; Modified: trunk/FreeOrion/parse/IntValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/IntValueRefParser.cpp 2014-06-07 08:40:00 UTC (rev 7142) +++ trunk/FreeOrion/parse/IntValueRefParser.cpp 2014-06-07 12:59:26 UTC (rev 7143) @@ -49,6 +49,7 @@ initialize_bound_variable_parser<int>(bound_variable, variable_name); initialize_numeric_statistic_parser<int>(statistic, variable_name); + initialize_complex_parser<int>(complex_variable, variable_name); initialize_expression_parsers<int>(function_expr, exponential_expr, multiplicative_expr, @@ -93,6 +94,7 @@ typedef parse::value_ref_parser_rule<int>::type rule; typedef variable_rule<int>::type variable_rule; typedef statistic_rule<int>::type statistic_rule; + typedef complex_variable_rule<int>::type complex_rule; typedef expression_rule<int>::type expression_rule; name_token_rule variable_name; @@ -100,6 +102,7 @@ variable_rule free_variable; variable_rule bound_variable; statistic_rule statistic; + complex_rule complex_variable; expression_rule function_expr; expression_rule exponential_expr; expression_rule multiplicative_expr; Modified: trunk/FreeOrion/parse/Tokens.h =================================================================== --- trunk/FreeOrion/parse/Tokens.h 2014-06-07 08:40:00 UTC (rev 7142) +++ trunk/FreeOrion/parse/Tokens.h 2014-06-07 12:59:26 UTC (rev 7143) @@ -89,16 +89,20 @@ (EffectsGroups) \ (Empire) \ (EmpireMeter) \ + (EmpireBuildingTypesProduced) \ + (EmpireBuildingTypesScrapped) \ (EmpireEmpireShipsDestroyed) \ (EmpireShipDesignsDestroyed) \ (EmpireShipDesignsLost) \ (EmpireShipDesignsProduced) \ + (EmpireShipDesignsScrapped) \ (EmpireSpeciesPlanetsBombed) \ (EmpireSpeciesPlanetsDepoped) \ (EmpireSpeciesPlanetsInvaded) \ (EmpireSpeciesShipsDestroyed) \ (EmpireSpeciesShipsLost) \ (EmpireSpeciesShipsProduced) \ + (EmpireSpeciesShipsScrapped) \ (Endpoint) \ (EnemyOf) \ (Enqueued) \ Modified: trunk/FreeOrion/parse/ValueRefParserImpl.h =================================================================== --- trunk/FreeOrion/parse/ValueRefParserImpl.h 2014-06-07 08:40:00 UTC (rev 7142) +++ trunk/FreeOrion/parse/ValueRefParserImpl.h 2014-06-07 12:59:26 UTC (rev 7143) @@ -66,6 +66,23 @@ }; template <typename T> +struct complex_variable_rule +{ + typedef qi::rule< + parse::token_iterator, + ValueRef::ComplexVariable<T>* (), + qi::locals< + std::string, + ValueRef::ValueRefBase<int>*, + ValueRef::ValueRefBase<int>*, + ValueRef::ValueRefBase<std::string>*, + ValueRef::ValueRefBase<std::string>* + >, + parse::skipper_type + > type; +}; + +template <typename T> struct expression_rule { typedef qi::rule< @@ -189,12 +206,14 @@ ; } -const reference_token_rule& variable_scope(); -const name_token_rule& container_type(); -const name_token_rule& int_var_variable_name(); -const statistic_rule<int>::type& int_var_statistic(); -const name_token_rule& double_var_variable_name(); -const statistic_rule<double>::type& double_var_statistic(); +const reference_token_rule& variable_scope(); +const name_token_rule& container_type(); +const name_token_rule& int_var_variable_name(); +const statistic_rule<int>::type& int_var_statistic(); +const complex_variable_rule<int>::type& int_var_complex(); +const name_token_rule& double_var_variable_name(); +const statistic_rule<double>::type& double_var_statistic(); +const complex_variable_rule<double>::type& double_var_complex(); template <typename T> void initialize_bound_variable_parser( @@ -284,3 +303,31 @@ [ _val = new_<ValueRef::Statistic<T> >(_a, _b, _c) ] ; } + +template <typename T> +void initialize_complex_parser( + typename complex_variable_rule<T>::type& complex_variable, + const name_token_rule& variable_name) +{ + const parse::lexer& tok = parse::lexer::instance(); + + qi::_1_type _1; + qi::_a_type _a; + qi::_b_type _b; + qi::_c_type _c; + qi::_d_type _d; + qi::_d_type _e; + qi::_val_type _val; + qi::eps_type eps; + using phoenix::construct; + using phoenix::new_; + using phoenix::push_back; + using phoenix::val; + + complex_variable + = ( + parse::label(EmpireBuildingTypesProduced_token) + ) + [ _val = new_<ValueRef::ComplexVariable<T> >(_a, _b, _c, _d, _e) ] + ; +} |
From: <geo...@us...> - 2014-06-19 23:20:33
|
Revision: 7172 http://sourceforge.net/p/freeorion/code/7172 Author: geoffthemedio Date: 2014-06-19 23:20:28 +0000 (Thu, 19 Jun 2014) Log Message: ----------- -Made complex valueref parameter parsing optional. -Minor grooming in effect parser. Modified Paths: -------------- trunk/FreeOrion/parse/EffectParser1.cpp trunk/FreeOrion/parse/IntComplexValueRefParser.cpp Modified: trunk/FreeOrion/parse/EffectParser1.cpp =================================================================== --- trunk/FreeOrion/parse/EffectParser1.cpp 2014-06-19 21:45:51 UTC (rev 7171) +++ trunk/FreeOrion/parse/EffectParser1.cpp 2014-06-19 23:20:28 UTC (rev 7172) @@ -71,12 +71,8 @@ generate_sitrep_message = tok.GenerateSitrepMessage_ > parse::label(Message_token) >> tok.string [ _a = _1 ] - >> -( - parse::label(Icon_token) >> tok.string [ _b = _1 ] - ) - >> -( - parse::label(Parameters_token) >> string_and_string_ref_vector [ _c = _1 ] - ) + >> -( parse::label(Icon_token) >> tok.string [ _b = _1 ] ) + >> -( parse::label(Parameters_token) >> string_and_string_ref_vector [ _c = _1 ] ) >> ( ( ( Modified: trunk/FreeOrion/parse/IntComplexValueRefParser.cpp =================================================================== --- trunk/FreeOrion/parse/IntComplexValueRefParser.cpp 2014-06-19 21:45:51 UTC (rev 7171) +++ trunk/FreeOrion/parse/IntComplexValueRefParser.cpp 2014-06-19 23:20:28 UTC (rev 7172) @@ -20,112 +20,112 @@ building_types_produced = ( tok.BuildingTypesProduced_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Name_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Name_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; building_types_scrapped = ( tok.BuildingTypesScrapped_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Name_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Name_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; empire_ships_destroyed = ( tok.EmpireShipsDestroyed_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Empire_token) >> int_value_ref [ _c = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Empire_token) >> int_value_ref [ _c = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; ship_designs_destroyed = ( tok.ShipDesignsDestroyed_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Design_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Design_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; ship_designs_lost = ( tok.ShipDesignsLost_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Design_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Design_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; ship_designs_produced = ( tok.ShipDesignsProduced_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Design_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Design_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; ship_designs_scrapped = ( tok.ShipDesignsScrapped_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Design_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Design_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; species_planets_bombed = ( tok.SpeciesPlanetsBombed_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Name_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Name_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; species_planets_depoped = ( tok.SpeciesPlanetsDepoped_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Name_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Name_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; species_planets_invaded = ( tok.SpeciesPlanetsInvaded_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Name_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Name_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; species_ships_destroyed = ( tok.SpeciesShipsDestroyed_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Name_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Name_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; species_ships_lost = ( tok.SpeciesShipsLost_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Name_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Name_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; species_ships_produced = ( tok.SpeciesShipsProduced_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Name_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Name_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; species_ships_scrapped = ( tok.SpeciesShipsScrapped_ [ _a = construct<std::string>(_1) ] - > parse::label(Empire_token) >> int_value_ref [ _b = _1 ] - > parse::label(Name_token) >> string_value_ref [ _d = _1 ] + >-( parse::label(Empire_token) >> int_value_ref [ _b = _1 ] ) + >-( parse::label(Name_token) >> string_value_ref [ _d = _1 ] ) ) [ _val = new_<ValueRef::ComplexVariable<int> >(_a, _b, _c, _d, _e) ] ; |