00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PARSER_H
00021 #define PARSER_H
00022
00023
00024 #include <string>
00025 #include <vector>
00026 #include <map>
00027
00028
00029 namespace sapecng
00030 {
00031
00032
00033 class abstract_builder
00034 {
00035
00036 public:
00037 enum const_vertex
00038 { GROUND = 0, };
00039
00040 enum dual_component_type
00041 {
00042 R,
00043 G,
00044 L,
00045 C,
00046 V,
00047 I,
00048 VM,
00049 AM,
00050 };
00051
00052 enum quad_component_type
00053 {
00054 VCCS,
00055 VCVS,
00056 CCCS,
00057 CCVS,
00058 AO,
00059 n,
00060 K,
00061 };
00062
00063 enum userdef_component_type
00064 {
00065 X,
00066 };
00067
00068 public:
00069 virtual ~abstract_builder() { }
00070
00071 virtual void add_circuit_properties(
00072 std::map<std::string,std::string> map) = 0;
00073 virtual void add_circuit_property(
00074 std::string name, std::string value) = 0;
00075
00076 virtual void add_wire_component(
00077 std::map<std::string,std::string> props =
00078 std::map<std::string,std::string>()
00079 ) = 0;
00080
00081 virtual void add_out_component(
00082 unsigned int v,
00083 std::map<std::string,std::string> props =
00084 std::map<std::string,std::string>()
00085 ) = 0;
00086
00087 virtual void add_dual_component(
00088 dual_component_type c_type,
00089 std::string name,
00090 double value,
00091 bool symbolic,
00092 unsigned int va,
00093 unsigned int vb,
00094 std::map<std::string,std::string> props =
00095 std::map<std::string,std::string>()
00096 ) = 0;
00097
00098 virtual void add_quad_component(
00099 quad_component_type c_type,
00100 std::string name,
00101 double value,
00102 bool symbolic,
00103 unsigned int va,
00104 unsigned int vb,
00105 unsigned int vac,
00106 unsigned int vbc,
00107 std::map<std::string,std::string> props =
00108 std::map<std::string,std::string>()
00109 ) = 0;
00110
00111 virtual void add_unknow_component(
00112 std::map<std::string,std::string> props =
00113 std::map<std::string,std::string>()
00114 ) = 0;
00115
00116 virtual void begin_userdef_component(
00117 std::string name,
00118 std::map<std::string,std::string> props =
00119 std::map<std::string,std::string>()
00120 ) = 0;
00121
00122 virtual void end_userdef_component(
00123 std::string name,
00124 std::map<std::string,std::string> props =
00125 std::map<std::string,std::string>()
00126 ) = 0;
00127
00128 virtual void flush() = 0;
00129
00130 };
00131
00132
00133
00134 class abstract_parser
00135 {
00136
00137 public:
00138 abstract_parser() { }
00139 virtual ~abstract_parser() { }
00140
00141 virtual void parse(abstract_builder& builder) = 0;
00142
00143 };
00144
00145
00146
00147 }
00148
00149
00150 #endif // PARSER_H