I wrote three simple functions to test the list class template (plus three functions to print the contents of the stack). The first first test function one tests an integer stack. The second test function defines a simple structure consisting of an integer and a character pointer (string). I think the parser (the next item to implement) will need a similar structure to hold pointer to the token string from the input line along with the column the token begins (needed to report the location of syntax errors). The third test function defines a simple enumeration to tests an enumeration stack.
It was during this testing I realized two things. First that I wanted to pass structure values to push onto the stack or pop from the stack by pointers and not by values (passing the entire structure is not efficient). A second was that I still wanted to be able to push constants for lists of simple types. I know this functionality will be needed for the operator stack in the translator. Therefore, this required two sets of push/pop functions. The same function names could be used because of C++'s overloading function name feature. I made the pop by pointer function return the status of whether the stack is empty before a value is popped, in other words, if false is returned, the stack is empty and no value is returned.
I have released this code so far. The ibcp_0.0.1-src.zip file has been uploaded at Sourceforge IBCP Project. The .zip file contains the list.h file with the list template class, the test_stack.cpp source file for testing lists (stacks), the VIDE2 project file test_stack.vpj and Makefile.v, both generated by VIDE2. The project was compiled using Borland C++ 5.5. (I have yet to get GCC working under MinGW for use with VIDE2 – something I will keep trying as I want to eventually compare the two compilers.)
Monday, December 28, 2009
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment
All comments and feedback welcomed, whether positive or negative.
(Anonymous comments are allowed, but comments with URL links or unrelated comments will be removed.)