Recovered from cvs revision 2007-09-23 03:02:00

This commit is contained in:
hyung-hwan 2007-09-23 13:20:00 +00:00
parent 3850634f37
commit a58d0ddf3d
3 changed files with 94 additions and 35 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: Awk.hpp,v 1.56 2007/09/21 15:29:51 bacon Exp $
* $Id: Awk.hpp,v 1.57 2007/09/22 14:40:44 bacon Exp $
*/
#ifndef _ASE_AWK_AWK_HPP_
@ -14,34 +14,36 @@ ASE_BEGIN_NAMESPACE(ASE)
/////////////////////////////////
/**
* Represents the awk interpreter engine
* Represents the AWK interpreter engine
*/
class Awk
{
public:
/** boolean data type */
/** Boolean data type */
typedef ase_bool_t bool_t;
/** data type that can hold any character */
/** Data type that can hold any character */
typedef ase_char_t char_t;
/** data type that can hold any character or an end-of-file value */
/** Data type that can hold any character or an end-of-file value */
typedef ase_cint_t cint_t;
/** Represents an unsigned integer number of the same size as void* */
typedef ase_size_t size_t;
/** Signed version of size_t */
typedef ase_ssize_t ssize_t;
/** Represents an integer */
typedef ase_long_t long_t;
/** Represents a floating-point number */
typedef ase_real_t real_t;
/** represents an internal awk value */
/** Represents an internal awk value */
typedef ase_awk_val_t val_t;
/** represents the internal hash table */
/** Represents the internal hash table */
typedef ase_awk_map_t map_t;
/** represents a key/value pair */
/** Represents a key/value pair */
typedef ase_awk_pair_t pair_t;
/** represents the external i/o context */
/** Represents the external I/O context */
typedef ase_awk_extio_t extio_t;
/** represents the run-time context */
/** Represents the run-time context */
typedef ase_awk_run_t run_t;
/** reprensts the underlying awk interpreter */
/** Represents the underlying interpreter */
typedef ase_awk_t awk_t;
/**
@ -326,7 +328,7 @@ public:
};
/**
* represents a return value of an intrinsic function
* Represents a return value of an intrinsic function
*/
class Return
{
@ -361,11 +363,9 @@ public:
} v;
};
/**
* represens the error code
*/
// generated by generrcode.awk
/** Defines the error code */
enum ErrorCode
{
ERR_NOERR = ASE_AWK_ENOERR,
@ -497,11 +497,9 @@ public:
};
// end of enum ErrorCode
/**
* Option
*/
// generated by genoptcode.awk
/** Defines options */
enum Option
{
OPT_IMPLICIT = ASE_AWK_IMPLICIT,
@ -516,15 +514,20 @@ public:
OPT_BLOCKLESS = ASE_AWK_BLOCKLESS,
OPT_BASEONE = ASE_AWK_BASEONE,
OPT_STRIPSPACES = ASE_AWK_STRIPSPACES,
/** Support the nextofile statement */
OPT_NEXTOFILE = ASE_AWK_NEXTOFILE,
/** Use CR+LF instead of LF for line breaking. */
OPT_CRLF = ASE_AWK_CRLF,
/**
* When set, the values specified in a call to Awk::run
* as the second and the third parameter are passed to
* the function specified as the first parameter.
*/
OPT_ARGSTOMAIN = ASE_AWK_ARGSTOMAIN
};
// end of enum Option
/**
* Represents the execution context
*/
/** Represents the execution context */
class Run
{
protected:
@ -545,7 +548,9 @@ public:
bool callbackFailed;
};
/** Constructor */
Awk ();
/** Destructor */
virtual ~Awk ();
/** Returns the error code */
@ -566,12 +571,29 @@ protected:
void retrieveError ();
public:
/**
* Opens the interpreter.
*
* An application should call this method before doing anything
* meaningful to the instance of this class.
*
* @return
* On success, 0 is returned. On failure -1 is returned and
* extended error information is set. Call Awk::getErrorCode
* to get it.
*/
virtual int open ();
/** Closes the interpreter. */
virtual void close ();
/** Sets the option */
virtual void setOption (int opt);
/** Gets the option */
virtual int getOption () const;
/** Defines the depth ID */
enum Depth
{
DEPTH_BLOCK_PARSE = ASE_AWK_DEPTH_BLOCK_PARSE,
@ -582,7 +604,9 @@ public:
DEPTH_REX_MATCH = ASE_AWK_DEPTH_REX_MATCH
};
/** Sets the maximum depth */
virtual void setMaxDepth (int ids, size_t depth);
/** Gets the maximum depth */
virtual size_t getMaxDepth (int id) const;
virtual const char_t* getErrorString (ErrorCode num) const;
@ -601,19 +625,44 @@ public:
/**
* Parses the source code.
*
* Awk::parse parses the source and optionally can write the parse tree.
* @return 0 on success, -1 on error
* Awk::parse parses the source code read from the input stream and
* writes the parse tree to the output stream. A child class should
* override Awk::openSource, Awk::closeSource, Awk::readSource,
* Awk::writeSource to implement the source code stream.
*
* @return
* On success, 0 is returned. On failure, -1 is returned and
* extended error information is set. Call Awk::getErrorCode
* to get it.
*/
virtual int parse ();
/**
* Executes the parse tree.
*
* Awk::run executes the parse tree created by Awk::parse.
* @param main name of an entry point
* @param args pointer to an array of character strings
* @param nargs number of characters strings in the array
* @return 0 on success, -1 on error
* This method executes the parse tree formed by Awk::parse.
*
* @param main Name of an entry point.
* If it is set, Awk::run executes the function of the specified
* name instead of entering BEGIN/pattern/END blocks.
* @param args Pointer to an array of character strings.
* If it is specified, the charater strings are passed to
* an AWK program. The values can be accesed with ARGC & ARGV
* inside the AWK program. If Awk::OPT_ARGSTOMAIN is set and
* the name of entry point is specified, the values are
* accessible as arguments to the entry point function.
* In this case, the number of arguments specified in the
* function definition should not exceed the number of
* character string passed here.
* @param nargs Number of character strings in the array
*
* @return
* On success, 0 is returned. On failure, -1 is returned if
* the run-time callback is not enabled. If the run-time callback
* is enabled, 0 is returned and the error is indicated through
* Awk::onRunEnd. The run-time callback is enabled and disbaled
* with Awk::enableRunCallback and Awk::disableRunCallback.
* Call Awk::getErrorCode to get extended error information.
*/
virtual int run (const char_t* main = ASE_NULL,
const char_t** args = ASE_NULL, size_t nargs = 0);
@ -697,7 +746,7 @@ protected:
virtual int closeSource (Source& io) = 0;
/**
* Reads from the source code stream.
* Reads from the source code input stream.
* A subclass should override this method. It should return 0 when
* it has reached the end of the stream and -1 on falure.
* When it has data to return, it should read characters not longer
@ -710,7 +759,7 @@ protected:
virtual ssize_t readSource (Source& io, char_t* buf, size_t len) = 0;
/**
* Writes to the source code stream.
* Writes to the source code output stream.
* A subclass should override this method. It should return 0 when
* it has reachedthe end of the stream and -1 on failure.
* It should write up to len characters from the buffer pointed at
@ -722,7 +771,6 @@ protected:
virtual ssize_t writeSource (Source& io, char_t* buf, size_t len) = 0;
/*@}*/
/**
* @name Pipe I/O handlers
* Pipe operations are achieved through the following methods.

View File

@ -1,5 +1,5 @@
/*
* $Id: StdAwk.hpp,v 1.14 2007/09/07 05:40:16 bacon Exp $
* $Id: StdAwk.hpp,v 1.15 2007/09/22 14:40:44 bacon Exp $
*/
#ifndef _ASE_AWK_STDAWK_HPP_
@ -11,6 +11,11 @@
ASE_BEGIN_NAMESPACE(ASE)
/////////////////////////////////
/**
* Provides a more useful AWK interpreter by overriding primitive methods,
* the file handler, the pipe handler and implementing common AWK intrinsic
* functions.
*/
class StdAwk: public Awk
{
public:
@ -19,7 +24,7 @@ public:
protected:
// builtin functions
// intrinsic functions
int sin (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int cos (Return* ret, const Argument* args, size_t nargs,

View File

@ -1,3 +1,9 @@
[0.3.1]
* changed the access modifier for the Awk::Source::Source from public
to protected.
* added source code documentation of ase/Awk/Awk.hpp.
[0.3.0]
* added ase_awk_setword to enable customization of keywords and