summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Mubashshir <ahmubashshir@gmail.com>2024-11-15 16:32:35 +0600
committerLibravatar Mubashshir <ahmubashshir@gmail.com>2024-11-15 16:32:35 +0600
commitd9d504f8366b5a0e38166eece845e8a33f18d477 (patch)
tree6c070385d91abb73e177c567c66e67e4ff600743
parent09499e86709e3499243c19966b02459a28deb191 (diff)
downloadlog-parser-d9d504f8366b5a0e38166eece845e8a33f18d477.tar.gz
log-parser-d9d504f8366b5a0e38166eece845e8a33f18d477.zip
Implement legacy grammar
Signed-off-by: Mubashshir <ahmubashshir@gmail.com>
-rw-r--r--src/system.l7
-rw-r--r--src/system.yy117
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