enhanced Awk::Awk to utilize Awk::Value

This commit is contained in:
2009-07-13 07:06:01 +00:00
parent 356e4c0792
commit 814ed89e53
8 changed files with 467 additions and 1031 deletions

View File

@ -34,33 +34,13 @@ static void print_error (const qse_char_t* msg)
print_error (0, msg);
}
static int awk_main (int argc, qse_char_t* argv[])
static int run_awk (QSE::StdAwk& awk)
{
QSE::StdAwk awk;
QSE::StdAwk::Run* run;
// initialize awk
if (awk.open() <= -1)
{
print_error (awk.getErrorMessage());
return -1;
}
// ARGV[0]
if (awk.addArgument (QSE_T("awk05")) <= -1)
{
print_error (awk.getErrorMessage());
awk.close ();
return -1;
}
if (awk.addArgument (QSE_T("awk05")) <= -1) return -1;
// ARGV[1] and/or the first console input file
if (awk.addArgument (QSE_T("awk05.cpp")) <= -1)
{
print_error (awk.getErrorMessage());
awk.close ();
return -1;
}
if (awk.addArgument (QSE_T("awk05.cpp")) <= -1) return -1;
const qse_char_t* script = QSE_T(
"BEGIN { print \">> PRINT ALL LINES WHOSE LENGTH IS GREATER THAN 0\"; }\n"
@ -72,24 +52,23 @@ static int awk_main (int argc, qse_char_t* argv[])
QSE::StdAwk::SourceFile out (QSE_T("awk05.out"));
// parse the script string and deparse it to awk05.out.
run = awk.parse (&in, &out);
if (run == QSE_NULL)
{
print_error (awk.getErrorLine(), awk.getErrorMessage());
awk.close ();
return -1;
}
if (awk.parse (&in, &out) == QSE_NULL) return -1;
// execute the BEGIN, pattern-action, END blocks.
if (awk.loop () <= -1)
{
print_error (awk.getErrorLine(), awk.getErrorMessage());
awk.close ();
return -1;
}
return awk.loop ();
}
static int awk_main (int argc, qse_char_t* argv[])
{
QSE::StdAwk awk;
int ret = awk.open ();
if (ret >= 0) ret = run_awk (awk);
if (ret <= -1) print_error (awk.getErrorLine(), awk.getErrorMessage());
awk.close ();
return 0;
return ret;
}
int qse_main (int argc, qse_achar_t* argv[])

View File

@ -29,67 +29,59 @@ static void print_error (unsigned long line, const qse_char_t* msg)
}
static void print_error (const qse_char_t* msg)
static int run_awk (QSE::StdAwk& awk)
{
print_error (0, msg);
QSE::StdAwk::Run* run;
const qse_char_t* script = QSE_T(
"function add (a, b) { return a + b }\n"
"function mul (a, b) { return a * b }\n"
"function div (a, b) { return a / b }\n"
);
QSE::StdAwk::SourceString in (script);
QSE::StdAwk::SourceFile out (QSE_T("awk06.out"));
// parse the script and deparse it to awk06.out
run = awk.parse (&in, &out);
if (run == QSE_NULL) return -1;
QSE::StdAwk::Value arg[2];
if (arg[0].setInt (run, -20) <= -1) return -1;
if (arg[1].setStr (run, QSE_T("51")) <= -1) return -1;
// ret = add (-20, 51)
QSE::StdAwk::Value ret;
if (awk.call (QSE_T("add"), &ret, arg, 2) <= -1) return -1;
// ret = mul (ret, 51);
arg[0] = ret;
if (awk.call (QSE_T("mul"), &ret, arg, 2) <= -1) return -1;
// ret = div (ret, 2);
arg[0] = ret;
if (arg[1].setReal (run, 2) <= -1) return -1;
if (awk.call (QSE_T("div"), &ret, arg, 2) <= -1) return -1;
// output the result in various types
qse_printf (QSE_T("RESULT: (int) [%lld]\n"), (long long)ret.toInt());
qse_printf (QSE_T(" (real) [%Lf]\n"), (long double)ret.toReal());
qse_printf (QSE_T(" (str) [%s]\n"), ret.toStr(QSE_NULL));
return 0;
}
static int awk_main (int argc, qse_char_t* argv[])
{
QSE::StdAwk awk;
QSE::StdAwk::Run* run;
// initialize awk
if (awk.open() <= -1)
{
print_error (awk.getErrorMessage());
return -1;
}
int ret = awk.open();
// ARGV[0]
if (awk.addArgument (QSE_T("awk05")) <= -1)
{
print_error (awk.getErrorMessage());
awk.close ();
return -1;
}
// ARGV[1] and/or the first console input file
if (awk.addArgument (QSE_T("awk05.cpp")) <= -1)
{
print_error (awk.getErrorMessage());
awk.close ();
return -1;
}
const qse_char_t* script = QSE_T(
"BEGIN { print \">> PRINT ALL LINES WHOSE LENGTH IS GREATER THAN 0\"; }\n"
"length($0) > 0 { print $0; count++; }\n"
"END { print \">> TOTAL\", count, \"LINES\"; }\n"
);
QSE::StdAwk::SourceString in (script);
QSE::StdAwk::SourceFile out (QSE_T("awk05.out"));
// parse the script string and deparse it to awk05.out.
run = awk.parse (&in, &out);
if (run == QSE_NULL)
{
print_error (awk.getErrorLine(), awk.getErrorMessage());
awk.close ();
return -1;
}
// execute the BEGIN, pattern-action, END blocks.
if (awk.loop () <= -1)
{
print_error (awk.getErrorLine(), awk.getErrorMessage());
awk.close ();
return -1;
}
if (ret >= 0) ret = run_awk (awk);
if (ret <= -1) print_error (awk.getErrorLine(), awk.getErrorMessage());
awk.close ();
return 0;
return -1;
}
int qse_main (int argc, qse_achar_t* argv[])