diff options
author | 2024-11-15 16:32:35 +0600 | |
---|---|---|
committer | 2024-11-15 16:32:35 +0600 | |
commit | d9d504f8366b5a0e38166eece845e8a33f18d477 (patch) | |
tree | 6c070385d91abb73e177c567c66e67e4ff600743 | |
parent | 09499e86709e3499243c19966b02459a28deb191 (diff) | |
download | log-parser-d9d504f8366b5a0e38166eece845e8a33f18d477.tar.gz log-parser-d9d504f8366b5a0e38166eece845e8a33f18d477.zip |
Implement legacy grammar
Signed-off-by: Mubashshir <ahmubashshir@gmail.com>
-rw-r--r-- | src/system.l | 7 | ||||
-rw-r--r-- | src/system.yy | 117 |
2 files changed, 94 insertions, 30 deletions
diff --git a/src/system.l b/src/system.l index 6c3cfb7..80c66a2 100644 --- a/src/system.l +++ b/src/system.l @@ -23,8 +23,8 @@ frc {digit}+\.{digit}+ {frc} { return parser::make_FRC(atof(yytext_ptr)); } {num} { return parser::make_NUM(atoi(yytext_ptr)); } -[\n]+ { return parser::make_BREAK();} -[ \t]+ { return parser::make_BLANK();} +[\n] { return parser::make_BREAK();} +[\t] { return parser::make_BLANK();} begin { return parser::make_START(); } end { return parser::make_END(); } ver { return parser::make_VERSION(); } @@ -44,6 +44,7 @@ total { return parser::make_TOTAL(); } avail { return parser::make_AVAIL(); } cache { return parser::make_CACHE(); } share { return parser::make_SHARED(); } +swap { return parser::make_SWAP(); } tswap { return parser::make_TSWAP(); } uswap { return parser::make_USWAP(); } @@ -56,6 +57,8 @@ avg { return parser::make_TAVG(); } : { return parser::make_COLON(); } \/ { return parser::make_SLASH(); } +Package\ id\ {num} {return parser::make_TSENSOR();}; + . { /* everything else */ } %% diff --git a/src/system.yy b/src/system.yy index d22ebd6..3e990c5 100644 --- a/src/system.yy +++ b/src/system.yy @@ -35,9 +35,9 @@ bool legacy = true; %parse-param {Lexer<symbol_type> &lexer} %token <uint64_t> NUM %token <double> FRC -%token <int> TOKEN -%token BREAK BLANK START END VERSION CPU BASE USER NICE -%token SYSP IDLE IOWP IRQP SIRQ CORE MEM TOTAL AVAIL CACHE +%token <int> KEY +%token BREAK BLANK START END VERSION CPU BASE USER NICE SWAP +%token SYSP IDLE IOWP IRQP SIRQ CORE MEM TOTAL AVAIL CACHE TSENSOR %token SHARED TSWAP USWAP TEMP CURR TMIN TMAX TAVG COLON SLASH %% @@ -75,6 +75,7 @@ block_end: data_block: version_block data_list + | cpu_legacy_list mem_legacy tmp_legacy ; version_block: @@ -82,9 +83,6 @@ version_block: legacy = false; cout << "ver\t" << $3 << "\t" << $5 << endl; } - | /* legacy */ { - cout << "ver\tlegacy" << endl; - } ; data_list: @@ -92,18 +90,18 @@ data_list: data: CPU BLANK cpu_block - | MEM BLANK mem_block - | TEMP BLANK temp_block + | MEM BLANK mem_current + | TEMP BLANK tmp_current ; cpu_percent: - USER { $<int>$ = yylhs.kind(); cout << $<int>$; } - | NICE { $<int>$ = yylhs.kind(); } - | SYSP { $<int>$ = yylhs.kind(); } - | IDLE { $<int>$ = yylhs.kind(); } - | IOWP { $<int>$ = yylhs.kind(); } - | IRQP { $<int>$ = yylhs.kind(); } - | SIRQ { $<int>$ = yylhs.kind(); }; + USER { $<int>$ = 0; } + | NICE { $<int>$ = 1; } + | SYSP { $<int>$ = 2; } + | IDLE { $<int>$ = 3; } + | IOWP { $<int>$ = 4; } + | IRQP { $<int>$ = 5; } + | SIRQ { $<int>$ = 6; }; cpu_block: BASE BLANK FRC BLANK NUM { @@ -114,8 +112,8 @@ cpu_block: })(msg.mutable_cpu()->mutable_base()); } | cpu_percent BLANK FRC BLANK FRC { - cout << $<int>1 << endl; string name = ([&](auto t) { + cout << t; switch(t) { case token_type::USER: return "user"; case token_type::NICE: return "nice"; @@ -161,12 +159,11 @@ mem_type: | USWAP { $<int>$ = 6; } ; -mem_block: +mem_current: mem_type BLANK NUM { ([&](auto mem, int t, uint64_t v) { - cerr << yystack_[2].kind() << ":" << endl; cout << "mem\t"; - switch((int)t) { + switch(t) { case token_type::TOTAL: mem->set_total(v); cout << "\ttotal" << msg.mem().total(); break; case token_type::AVAIL: mem->set_avail(v); cout << "\tavail" << msg.mem().avail(); break; case token_type::CACHE: mem->set_cache(v); cout << "\tcache" << msg.mem().cache(); break; @@ -176,13 +173,9 @@ mem_block: default: break; } cout << endl; - })(msg.mutable_mem(), $<int>1, $<uint64_t>3); + })(msg.mutable_mem(), yystack_[2].kind(), $<uint64_t>3); } ; -temp_block: - tmp_current - | tmp_legacy - ; tmp_current_type: CURR | TMIN | TMAX | TAVG; tmp_current: @@ -190,6 +183,78 @@ tmp_current: if (legacy) throw syntax_error("TEMP Block in legacy data."); using token = yy::parser::token::token_kind_type; + ([&](auto tmp, int t, uint64_t v) { + cout << "tmp\t"; + switch(t) { + case token::CURR: tmp->set_cur(v); cout << "cur\t" << tmp->cur(); break; + case token::TMIN: tmp->set_min(v); cout << "min\t" << tmp->min(); break; + case token::TMAX: tmp->set_max(v); cout << "max\t" << tmp->max(); break; + case token::TAVG: tmp->set_avg(v); cout << "avg\t" << tmp->avg(); break; + default: break; + } + cout << endl; + })(msg.mutable_tmp(), yystack_[2].kind(), $<uint64_t>3); + } + ; + +cpu_legacy: CPU BLANK cpu_block; +cpu_legacy_list: + cpu_legacy BREAK + | cpu_legacy BREAK cpu_legacy_list + ; + +mem_legacy: mem_legacy_total mem_legacy_list BREAK; +mem_legacy_total: + MEM BLANK NUM { + msg.mutable_mem()->set_total($<uint64_t>3); + cout << "mem\t" << msg.mem().total(); + } + +mem_legacy_type: AVAIL | CACHE | SHARED; +mem_legacy_list: + BLANK mem_legacy_data + | mem_legacy_list BLANK mem_legacy_data + ; + +mem_legacy_ram: + mem_legacy_type COLON NUM { + ([&](auto mem, int t, uint64_t v) { + switch(t) { + case token_type::AVAIL: mem->set_avail(v); cout << "\tavail:" << msg.mem().avail(); break; + case token_type::CACHE: mem->set_cache(v); cout << "\tcache:" << msg.mem().cache(); break; + case token_type::SHARED:mem->set_share(v); cout << "\tshare:" << msg.mem().share(); break; + default: cout << "\tundefined:" << v; break; + } + })(msg.mutable_mem(), yystack_[2].kind(), $<uint64_t>3); + } + ; + +mem_legacy_data: + mem_legacy_ram + | SWAP COLON NUM SLASH NUM { + msg.mutable_mem()->set_tswap($<uint64_t>5); + msg.mutable_mem()->set_uswap($<uint64_t>3); + cout << "\tswap:" << msg.mem().uswap() << "/" << msg.mem().tswap() << endl; + } + ; + + +tmp_legacy: tmp_legacy_block BREAK { + cout << "legacy temp block" << endl; + if (! legacy) throw syntax_error("Unknown TEMP Block data."); +}; + +tmp_legacy_block: + TEMP BLANK TSENSOR tmp_legacy_list + | tmp_legacy_list; + +tmp_legacy_list: + BLANK tmp_legacy_data | tmp_legacy_list BLANK tmp_legacy_data; + +tmp_legacy_type: CURR | TMIN | TMAX | TAVG; +tmp_legacy_data: + tmp_legacy_type COLON NUM { + using token = yy::parser::token::token_kind_type; ([&](auto tmp, token t, uint64_t v) { switch(t) { case token::CURR: tmp->set_cur(v); break; @@ -200,10 +265,6 @@ tmp_current: } })(msg.mutable_tmp(), $<token>1, $<uint64_t>3); } - ; - -tmp_legacy: - ; %% namespace yy |