ill Hi HI l5iB8r Hob HI ■■11 lllllllll ■HHra jBMBIBii M l ffmMpW a Wi nHHHlIll gfflliillliill n iiis« fBn ■ Hfift IHHH LIBRARY OF THE UNIVERSITY OF ILLINOIS AT URBANA-CHAMPAIGN 5IO. 84- IJtGr no.703 -?Ofe Cop. % Digitized by the Internet Archive in 2013 http://archive.org/details/computerapproach704oche Li**" ■? UIUCDCS-R-75-70U March 1975 J' / ) / lA^<- r '^l A COMPUTER APPROACH TO THE MANIPULATION OF TABLES by Ivan Hueck Ochea MAY 7 1975 DEPARTMENT OF COMPUTER SCIENCE UNIVERSITY OF ILLINOIS AT URBANA CHAMPAIGN URBANA, ILLINOIS UIUCDCS-R- 75-70*1 A COMPUTER APPROACH TO THE MANIPULATION OF TABLES by Ivan Hueck Ochea March 1975 Department of Computer Science University of Illinois at Urbana- Champaign Urbana, Illinois This work was supported in part by the National Science Foundation under Grant No. US NSF DCR73-07980A02 and was submitted in partial fulfillment for the Master of Science degree in Computer Science. Ill ACKNOWLEDGMENT I wish to express my thanks to my advisor, Professor David Kuck, who suggested the thesis topic and who has provided invaluable counsel, understanding and support and to my wife, Ludmila, who has given me constant encouragement, inspiration and motivation. Thanks are also due to Mr. Philippe Cuneo who gave his colaboration and suggestions in the implementation of the actual system. Special thanks to June Wingler for her efficient typing of this manuscript, and to Vivian Alsip for her suggestions in the preparation of this paper. XV TABLE OF CONTENTS Page INTRODUCTION 1 1. A SOFTWARE SYSTEM 3 1. 1 Input Command 3 1.2 DISPLAY Command 6 1. 3 NEXTR Command 9 1. k NEXTD Command 10 1. 5 NEXTL Command (NEXT TO THE LEFT) 10 1. 6 NEXTU Command (NEXT UP) 11 1. 7 PRINT Command 11 1. 8 COPY Command ik 1. 9 REMOVE Command ik 1. 10 CALCULATE Command 16 1. 11 COMPUTE Command 18 1.12 SKETCH Command 18 1. 13 ROTATE Command 20 2. SOME RELEVANT ASPECTS OF THE IMPLEMENTATION 22 2 . 1 The System Organization 22 2.2 The Parsing Procedures 23 2.2.1 The Syntax Analyzer 23 2.2.2 GETSYMBOL , 30 V Page 2.2.3 GETCIAUSE 30 2.2.1+ GETTERMINAL 32 2.3 The Input Routine and the Internal Representation of the Tables 32 2 . k Input Routine (Flowchart Description) 38 2. 5 The Command Execution k2 3. SYSTEM EXPANSION kk 3 . 1 Output Commands kk 3.2 Graphical Capabilities k6 3. 3 Referencing the Data Contained in the Table. i+7 3. k Operations Between Two Tables kQ 3. 5 Arithmetic Operations Between Two Tables 1+9 3.6 Iterations 51 3.7 User Functions 51 k. REMARKS 5I4. BIBLIOGRAPHY 55 VI LIST OF FIGURES Figure Page 1.1 An example of table k 1.2 General description of the input command 7 1.3 CRT output displayed when command DISPLAY (CS 903 ) is executed 8 l.k CRT output after execution of the NEXTR command 9 1. 5 NEXTD 10 1. 6 NEXTL 10 1.7 A hard copy print-out obtained by the execution of PRINT(CS 903 ) 12 1.8 Assembled output of the table shown in Figure 1.7 13 1.9 Table obtained after execution of REMOVE ( SECTION. B, LITERAL, HOMEWORK) FROM (CS 903 ) 15 1.10 Resulting table after execution of CALCUIATION(TOT=FST TERM +SCN TERM)lN (CS 903) 17 1.11 Table obtained after execution of COMPUTE (NEWTABLE= 500-2* CS 903 ) l8 1. 12 Graphical plotting obtained by the execution of SKETCH (FST TERM, TOT) IN (CS 903) 19 1.13 Graphical histogram obtained executing SKETCH (*T0T, 8) IN (CS 903) 21 2.1 Organization 2k 2.2 Very general flowchart of the monitor program 25 2.3 Syntax tree director 27 Vll Figure Page 2.3.1 A node of the syntax tree director 28 2.4 Very general flowchart of the parser 29 2 . 5 Flowchart of GETCIAUSE 31 2 . 6 Terminal symbol 33 2. 7 Symbol table 3^ 2 . 8 Table data structure 36 2.9 General flowchart of the input routine 39 INTRODUCTION Tables have been used in most scientific documents for illustration purposes, condensing results or just for backing the arguments of the authors. By their intensive use during the last century, tables have become a natural and familiar way of communication. Today entire volumes of tables can be acquired at almost any bookstore. Procedures and tabulation methods have been developed in order to solve very specialized problems in the different fields of the sciences. Researchers and engineers keep their experimental results in the form of tables. Also, businessmen, statisticians and economists use tables extensively. However, the preceding considerations appear not to have been a motivation for computer developments on manipulation of tables or in computer tabulation methods. Potential users of systems for such purposes have been forced to make use of the narrow and sometimes unnatural array representation of most high level compilers, in order to take advantage of the computer facilities. Beginner programmers appear to have problems in understanding this kind of representation and experienced ones have problems in interpreting even programs written by themselves because they have to remember what piece of information was represented by a linear element or an entry of the array. The present paper tries to give an initial approach to the manipulation of tables. In other words what is wanted is to develop a system capable of doing meaningful arithmetic and statistical operations on tables or between tables. In Chapter one (l) a set of commands of an actual computer system will be described, in Chapter three new additional capabilities will be proposed and in Chapter 2 some relevant aspects of the implementation will be discussed. 1. A SOFTWARE SYSTEM In this chapter some table operations will be described simultaneously with the corresponding system commands. The interface language between user and machine is actually composed of thirteen (13) commands which are designed to provide meaningful descriptions of such table operations. The commands are going to be described in the order they were implemented. It will be seen by the reader that some of the latter commands are provided with capabilities not present in earlier commands. This is due to the fact that while the implementation was being accomplished, more capabilities were realized to be necessary and so were immediately implemented. 1.1 Input Command Through the use of the input command a system user can introduce a table into the system. This table may contain alphanumerical data, numerical data or both. The columns and rows may be described by an identifier (a name). A set of columns or rows may be described by a global identifier. Additionally the table may contain implicit subarrays. Let's describe such a table with an example (see Figure l.l). In this example, the global name "GRADES" represents a set of two different sets of columns: "PARTIAL" and "FINAL"; "PARTIAL" is composed of "HOMEWORK, " "1ST TERM" and "2ND TERM" where homework is an implicit array of 5 columns. The rows are also discriminated in this example in two 1+ cs 903 GRADES PARTIAL FINAL HOMEWORK TERM EST TERM MUM NAL LITER- AL SECTION A PARKER 12 25 25 13 38 1+1+ 51 05 A SCHLY H 18 25 20 15 56 57 69 05 A HORN R 02 23 10 09 16 ^9 56 03 C G-IROW R 21 22 15 15 1+8 61+ 82 05 A GLISH J 11 22 20 10 15 ^5 56 01+ B GOLD R 18 23 28 11 27 50 60 01+ B HERTIG 25 25 25 16 56 i+7 91 05 A SECTION B HILL D 07 23 10 13 1+8 7U 75 01+ B HUSBY R 21 10 02 05 21+ 36 31 03 C ISHIDA 05 15 06 11 1+8 67 53 01+ B JOYCE R 11 25 13 10 01+ 29 32 03 C KAHLER 23 03 30 08 19 39 35 03 C KENN R 05 23 06 16 1+8 68 88 05 A KUHN P 19 25 18 06 01 31 h9 01+ B LAW R 18 25 19 11 19 51 29 ok B LOPEZ T 19 18 2*+ 13 16 hi 81 01+ B LOWRY H 15 22 15 18 55 60 77 05 A ORBAN Q 17 27 19 15 1+1+ 39 50 01+ B SAKOL N 23 30 25 22 1+1+ 79 76 05 A TAYLOR 13 17 21+ lU 1+8 59 85 05 A Figure 1.1 An example of table. different groups: "SECTION A" and "SECTION B. " It can be seen that while most columns in this example are numeric values, column "literal" is composed of alphabetical characters. Ignoring for now what would be the internal computer representation of such a table (it is described in Chapter 2) let's describe the input command for introducing this table into the system. Initially the user has to type at his terminal: INPUT; The system will answer with "•/." indicating it is ready for inputting the table. Then the user will enter the parameters of the table in the following form: CS 903' GRADES (PARTIAL (HOMEWORK $(5), FSTTERM, SCNTERM), FINAL (NOMINAL LITERAL)) - SECTION A (PARKER, SCHLY H, HORN R, GIROW R, GLISH J, GOLD R, HERTIG )^ SECTION .B (HILL D, HUSBY R, I SHIM, JOYCE R, KAHLER, KENN R, KUHN P, LAW R, LOPES T, LOWRY H ORBAN Q, SAKOL N, TAYLOR) # 12, 25, 25, 13, 38, kk, 51, 5, A, 18, 25, 20, 15, 56, 57, 69, 5, A, } • J where : CS 903 will be the name of the table. The parenthesis ■ after "GMDES" means that grades contains one or more different columns, and so happens with "PARTIAL" which contains more than one column. The sign '"" indicates to the system that the list of the column labels follows. The sign "-" indicates that the list of the row labels follows and the sign "#" indicates that the entries of the table (DATA) are going to be given. The sign $(K) represents an array of linear elements (row/columns) where "K" gives the number of linear elements to be reserved. The general format for the parameters in the Input command can be described as in Figure 1.2. The actual data structure of the table is provided with capabilities to accept up to seven different levels in the hierarchy of labels of any column or group of them. Additionally users may define two-dimensional arrays just by typing '$(#ROWS)-$(#COLUMNS)#(LIST OF ENTRIES) 1.2 DISPLAY Command The DISPLAY command will print at the user terminal the table requested by the user. The format of this command is as follows: DISPLAY(); If we want to display the table used as the example in the preceding section, one should type DISPIAY (CS 903); As a result the system will display the table shown in Figure 1.3. As can be seen in the output obtained, the complete table could not be displayed; this is a consequence of the size of the screen. It requires from the system some additional capabilities in order to display '-#; : :, | | ' (}_,| () | $(),| $() | $() | $(), : :,| | (),| () | $(),| i()| $() | $(), : :, | : :| | "" : : : : : :Numerical constant : :Any string of characters : : String which contains letters or numbers only Figure 1.2 General description of the input command. 8 S)Q)S)S)S)CDISS9$ Q ffl 5) (S O ® S a ■■ oo h a. '■« M 10 Ji 10 © d ifi « If) d © 00 ifl T UJ l ■T ! 1 0- Ifl I CD O O X X 33 !— 1 t—, - i - ■*- * 1 _l o CJ oc LU l_! UJ on the CRT terminal the rest of the table. For such purposes four commands have been provided. They are NEXTR, NEXTD, NEXTU, NEXL. 1.3 NEXTR Command After this command is executed it will display on the screen the next part of the table to the right of the actual part on the screen. Then after typing NEXTR; it will display what is shown in Figure l.k. F I NHL EST TERN SON TERN MOM I NfiL LITERAL ■ bh C ' I ON PHRKER 00044 00051 00005 fl 1 . fl c;r.'HL : V H 00057 i3Qi&69 00005 fl HORN R OO049 O0O56 00003 c (3 1 ROW R O0O64 O0O82 00005 fl GLISH J 00045 00056 ! 00004 B GOLD R 0O05O 00060 00004 B M! :: > 1 Kj 0004 T 00091 00005 fl ! SEC:'! I i !N ;X I i 1 • (j 00074 OO075 00004 B i p HUSBV R 00036 0OO31 00003 C I SHI DA 00067 O0O53 00004 B JQVCE R 0OO29 0OO32 00003 c KRHLER 00039 00035 00003 c KENN R 00068 0OO88 00005 fl KUHN P 00031 0OO49 00004 B LAW R 00051 £10029 00004 B LOPEZ T OO £147' 00081 00004 B Figure l.k CRT output after execution of the NEXTR command. Figure l.k is the part to the right of our last figure (Figure 1.3). It can be observed that the label of the rows have been recopied; this is for the purpose of allowing the user to recognize the information which is displayed. 10 l.U NEXTD Command Like NEXTR this command will print another part of the table, this time the part which is below the part we are looking at. In our example it will print as shown in Figure 1.5. FIf-4flL F 5T TERM SCN TERM NOMINRL LITERRL LOWRV H @@@6@ 00077 00005 R ORBflN Q 80039 00050 00004 B SfiKOL N 00079 00076 00005 R TflVLOR 0005.9 00085 00005 R Figure 1.5 NEXTD Also, in this example it can be observed that the labels have been recopied; this time the labels of the rows and the labels of the columns. 1.5 NEXTL Command (NEXT TO THE LEFT) It will display the part to the left of the last part displayed. After NEXTL; is typed it will display as shown in Figure 1.6. CS 903 GRADES PARTIAL HOMEWORK LOWRV H 08815 80022 00015 00018 ORBRN G 80817'' 00027 00019 00015 SflKOL N 88823 00030 00025 00022 TflVLOR 88813 00017 00024 00014 Figure 1.6 NEXTL 11 Figure 1.6 is the part to the left of the last part displayed. In other words the part below to the first part displayed. 1.6 NEXTU Command (NEXT UP) It will display the part above the last part of the table displayed, In our example it will display the first part displayed in Figure 1.3. It is interesting to note that these four commands can be used repeatedly going in any direction (up, down, left, right). If table operations are being accomplished, it won't alter the information displayed until a new command DISPLAY is executed. If a user tries to go several times in only one direction, then the system may find the end of the table in that direction. If so it will print one of the following messages: NOTHING TO THE RIGHT NOTHING TO THE LEFT NOTHING UP NOTHING DOWN 1.7 PRINT Command This command will print the table on the line printer. The output has been designed in such a way that the user can take the different pages produced on the line printer and rebuild big tables by just putting together the different pages. The format of the command is as follows: PRINT (); In our actual example it will print the tables shown in Figure 1.7 which can be put together to form the table shown in Figure 1.8. 12 CS 903 GRRDES PRRTIRL HOMEWORK SECTION ! PARKER 00012 1 00025 00025 00013 1 0003? R ! SCHLV H 00018 00025 00020 00015 00936 1 HORN R 00002 00023 00010 00009 00016 ! QIROW R 00021 00022 00015 1 00015 1 00046 1 GLISH ,T 00011 00022 00020 00010 0001! ! GOLD R 00018 00023 00028 00011 0002? ! HERTIG 00025 00025 00025 00016 0005*: lECl ION ! HILL D 00007 00023 00010 00013 00048 B ! HUSBV R 00021 00010 00002 00005 00024 ! I SH 1 Dfl 00005 00015 00006 00011 00046 ! JOVCE R 00011 00025 00013 00010 00004 ! ' KfiHLER 00023 00003 00030 00008 00015 ! KENN R 00005 00023 00006 00016 00046 « KUHN P 00019 00025 00018 00006 ' 00001 1 LAW R 00018 00025 00019 00011 00015 ! LOPEZ T 00 01 9 00018 00024 00013 00016 1 LOWRV H 00015 00022 00015 .! 00018 00035 1 ORBRN Q 00017 00027 00019 00015 00044 ! SflKOL N 00022 00030 00025 00022 00044 ! TfiVLOR 00013 00017 00024 00014 00046 F I NAL Hbl TERM SON TERN NOMINAL LITERAL ml i!,i,. 1.4 00051 00005 R 00057' 00069 88885 R 00849 00056 00002 c 00064 06082 88885 R 00045 00056 88884 B 00050 00060 00884 B 0004?' 00091 88885 R 00074 08075 88884 B 00036 0O021 88882 c 0006?' OO052 88884 B 0002^ O0O22 1 88082 C 00039 00935 ! 88882 1 c 00068 00 08 8 ! 88885 . R 00021 OO049 88884 B O0O51 00O29 1 88884 B 00847 00081 1 88884 B yi-iy^p; 0OO77 88885 R 00029 I3005O ! 88884 B 000 J 00076 1 88885 R MlJtl^.Ct 8O085 88885 R Figure 1.7 A hard copy print-out obtained by the execution of PEINT(CS 903) v i if) t '•£' M f- ifi •■• ©' © ©> © © © © © © ' © © © © © © © © © © © © © © © I! © CD © © © © © © © © © © © © © -• 25 © © S E © © © © © © © © © © © © © ©i © coyMficoinNifloo'S-co^asooHcrtiflm*-*-© NIDT<1'HMID4'C4f9T(«|H«IRttt ©©©©©©©©©©©©©©©©©©©© © ©I © © © © © © © © © © © © © © © © © © ©©©©©©©©©©©©©©©©©©©© m if)Chm©HiOMmH©coy>v)T4 m co in cnj rr HHCDHHHHHQHHCSHCSrlHHHCMH © © © © © © © © © © © © Q © © © © © © © ©i©©©©©©©©©©©©©©©©©©© © © © © © © © © © © ©i © © © © © ® © © © in © © in © co in © co '■£" m © 'o co en * in cm m ^ CM CM H H CM CM CM Ti ® -rl M © H H CM H H CM CM © ©©©©©© © © © © © © © © © © © © © © ©i © © © ©i © © ©i © i© © © © © © © © © ©i © © © ©' © © © © © © © © © © © © © © © © to IP M SM --.J i -'i If) PI © if) If) PI i "i If) m PB CM r- © N CM CM CM CM CM CM CM CM H H CM © CM CM CM H CM CM M H © © © © ©i © ©• G< © © © ©i ©' ©' © ©• © © © © © © © © ©• © © ©' © © ©' ©' ©' ©' © ©' © © © © © © © © © © ©' © © © © © C' ©' © © © © © ©' r-i _J X -M CO CM H H CO /) N ~Z. I -< > Ci ,il UJ iX N > Z _l © -JZOliiii-JffiH CJ _J Z *: UJ ix CC O _J xIxx^_lix_J 'J 'i Z>XZIZXZlux> 'X CJ © mJOUImD in © X UJ D X O O x I X a. .ji x © oaniH^yyiiJj _j © m h Ik 1.8 COPY Command As it will be seen in the next chapter the system is provided with two different files. One for storing the system tables (tables which can be retrieved by the user but are permanent in the system) and the other for storing the user tables (tables provided by the user through the input command). The system file tables are read-only. As a consequence the user cannot by any means modify these tables. Whenever a user wants to manipulate one of the system tables, he has to copy it into the user file prior to the use of any manipulation command containing the name of the table. In order to do this the user has to type COPY (); this command will place into the user file the table ", " and it will have the same name in the user file. Actually, the user file is deleted as soon as the user 'IDGS OFF' the system. Whenever a user tries to use a table of the system for any calculation and this table has not been copied into the user file, the system will answer: TABLE NOT FOUND which means that the table is not in the user file. When the message appears after a DISPLAY or PRINT command it means that the table is unknown to the system. 1.9 REMOVE Command This command provides the system user with a tool for removing a row/column or a group of rows/columns according to the name or names 15 of the row(s)/column(s), or a logical description of the rows/column(s). The format of the command is : REMOVE () FROM () where
  • : : ,
  • where may be of a logical form. For example, the user may have A > 23 in his expression; this will delete all rows (if A is a column) which have a number larger than 23 in the column A, and vice versa if A is a row. He may use plus (+), minus (-), times (x), less than (<), equal to ( = ), greater than (>), and (&), and or (') in logical expressions. For example A+B>2&C<9isa perfectly valid expression. If A is a column then this expression will delete the rows where A + B is greater than 2 and simultaneously C is smaller than 9« As another example : REMOVE ( SECTION. B, LITERAL, HOMEWORK) FROM (CS 903); will produce the table shown in Figure 1.9. CS 90S GRADES PARTIAL F I NAL FST TERN SCN TERM NOMINAL I t, (;■(■"■ | I Qfl PRRKER 00044 00051 00005 I j:..j SCHLV H 00057 00069 00005 HORN R 00049 00056 00003 1 |.Jl..;i;j f. ! 00064 00082 00005 GLISH J ! 00045 ! 00056 ! 00004 GOLD R ' 00050 ! 00060 00004 HERTIG ! 00047 00091 00005 Figure 1.9 Table obtained after execution of REMOVE (SECTION. B, LITERAL, HOMEWORK) FROM (CS 903) 16 The following command will produce the same result REMOVE ( SECTION. B, JOYCE R = C, HOMEWORK) FROM (CS 903 ) Restrictions . It may be obvious that rows have to be described by the use of their names or by the value of one or more of their columns. Using the same argument columns have to be described by their name or by the value of one or more of their rows. Then logical descriptions containing names of columns and rows at the same time are not valid expressions for this command because such expressions won't describe any row or column. When such expressions are used the system will respond with the message "INVALID FORMAT. " Whenever a column/row is removed it is checked to see if the row/column had a father (upper level). If this is the case, then it is checked to see if that father has any other sons. If so the process is finished. Otherwise, the father is removed too. This part of the process may be repeated if the father has a father. In other words, whenever a label is removed (at any level) the father is removed, if it does not have any other sons. 1.10 CALCUIATE Command This command will perform arithmetic operations between column(s)/row(s). The assignment expression to be evaluated can contain constants, variables, and names of rows/columns if the expression is a column expression (it does not contain names of rows but columns). Then if the left-hand part of the assignment expression is a new name (does not exist in the table) then a new column is created whose name is the left-hand side of the expression. As an example, after executing CALCULATE (TOT = FST TEEM + SCN TERM) IN (CS 903); our table will look like Figure 1.10. 17 1 CS 983 ! GRADES ! TOT , prrtipil F I NAL FST TERN 1 SCN TERN NOMINAL '.'!" I rj? 1 PARKER 1 88844 1 88851 00005 1 88895 fi SCHLV H 88857 1 88869 88885 1 88126 HORN R 88849 88856 88883 88185 GIROW R 88964 80082 £18885 88146 QLISH J 88845 88856 00004 88181 GOLD R ! 88858 ' 88868 ! 88884 ' 88118 HER! 1G 88047 ' 88891 ! 88885 88138 Figure 1.10 Resulting table after execution of CALCULATE (T0T= FST TERM +SCN TERM)lN (cs 903). ' The format of the calculate command is as follows : CALCULATE () IN () is a Fortran like assignment statement with the following differences : a) It contains names of rows or names of columns. b) Variables are represented by preceding the corresponding identifier with the sign $. Note. A "variable $ is a location in the user work area storage (described in Chapter 2) which is addressable by the user. This area can be used to store temporary values to be used, in later operations. 18 1.11 COMHJTE Command This ccmmand has been designed in order to allow the system user to create tables resulting from arithmetic operations between tables (see Chapter 3). Actually only the name of one table can be used on the right-hand side of the assignment statement. However, the name of that table may appear several times. A new table is created when the name which appears on the left-hand side of the expression is different than the name of the table which appears in the right-hand side. As an example we may type COMPUTE (NEWTABLE = 500-2* CS 293); which will produce the table in Figure 1.11. NEWTABLE GRADES TOT PARI 1AL FINAL FS1 TERM SON TERM NOM I NAL .- i i ' ] ON PARKER 08412 08398 08498 00310 R SCHLV H B&'J-Bfj 0036 cf 88498 00248 HORN F 00402 00 3£ P; 88494 00290 Q I ROW R 00372 0032 6 88498 00208 GLISH J 00410 00 3£ S 88492 00298 GOLD R 00400 08 3 £ 88492 00280 HER Tib 00406 0031 88490 00224 Figure 1.11 Table obtained after execution of COMPUTE (NEWTABLE=500-2* CS 903). 1.12 SKETCH Command The system has also been provided with graphical capabilities. Usii the sketch c omm a n d the system user can plot at his terminal a column (row) as a function of another column (row). For this purpose the user has to 19 give to the system the names of the linear elements to be plotted and the name of the table to which the belong. As an example, typing SKETCH (FST TEEM, TOT) IN (CS 903 ); will produce on the CRT screen the picture shown in Figure 1.12. roi Mi 1 ! ''•'■:' ■■!•• I I I 081 4 jS •+■ i i i i i I 10 !. i 1 ■+■ i 8004 A 08852 09060 000 6 i FST TERM Figure 1.12 Graphical plotting obtained by the execution of SKETCH (FST TERM, TOT) IN (CS 903). Also typing SKETCH (FST TERM, TOT, LP) IN (CS 903); will produce the same picture but now on the line printer. 20 In the current version of this command new capabilities were implemented in order to obtain a better reference medium for describing the linear elements of the tables (rows, columns). Now a row (column) can be referenced by its relative position from top to bottom (or left to right). The first row in the table has relative position 1 (as does the first column). For example, #1 represents first row and f 2 represents second column. A few examples of this. command are: SKETCH (A, B) IN (TABLE); plots out "A" vs. "B M SKETCH ('2, *k) IN (TABLE); plots the second column against the fourth column SKETCH (#3, #1) IN (TABLE); plots third row vs. first row Additionally, the sketch command has been provided with a subroutine which is capable of making a histogram of a column (row). So it is typed SKETCH (*T0T, 8) IN (CS 903). It will plot the histogram as shown in Figure 1.13. The character "*" before the reference to the column "TOT" indicates to the system that a histogram is wanted. The second parameter "8" represents the size of the interval in which the frequencies of occurrences are going to be counted. Also the command SKETCH (*T0T, 8, LP) IN (CS 903); will print the same histogram on the line printer. 1.13 ROTATE Command This command will rotate the table 90 • It means that rows are going to be column and vice-versa. Also there is the transposition of the labels. Then the new table will be the actual table transposed with their respective labels. 21 HISTOGRAM FREQUENCY 0000" + i i i 00002 0: !! !0j. + 0! ; ! -!- i i i r J 00 - .1 i i il 309' 00111 TOT Figure 1.13 Graphical histogram obtained executing SKETCH (*T0T, 8) IN (CS 903). 22 2. SOME RELEVANT ASPECTS OF THE IMPLEMENTATION The actual system in operation was implemented in a PDP ll/i+O machine with an INFOTON CRT and a CENTRONIC 306 line printer, The actual characteristics of the computer system imposed many restrictions in the implementation of the table manipulation system. The most relevant were : a. The computer system did not perform arithmetic (except addition and subtraction). b. The table manipulation system had to run in 10K bytes of core memory. c. The computer system was not provided with overlay capabilities. 2.1 The System Organization In order to overcome the restrictions imposed by (b) the system was divided in different subroutines, each one corresponding to a command. These set of subroutines composed the actual system library. A monitor program had to be written in order to overcome (c) and allow the different routines to share the 10K storage allowed. This monitor will take care of the administration of the storage resources by reading from a disk file the subroutine required for executing a command. A very general flowchart is shown in Figure 2.2. 23 The system is provided with two data files where the tables are going to be stored. One of the files (READ ONLY) is permanent and contains all the system tables (Data Base). Additionally it will contain the system symbol table and the system vocabulary (set of names and character strings known by the system). This file cannot be changed (actually) by the system user (see Figure 2.1). The other file will contain the set of tables defined by the user in a given session. It will contain the user vocabulary (the system vocabulary expanded with new words used by the user) and the corresponding symbol table. The tables of the user can be modified through the use of the system commands in order to produce the results wanted by the user. Whenever a user LOGS ON the system the monitor will copy the system symbol table into the user symbol table. This also happens with the system vocabulary which is copied into the user vocabulary. During the user's session with the system, the user vocabulary will grow with the new symbols used by the user. However, this additional vocabulary will dissappear when the user LOGS OFF the system. Users can manipulate a table of the system file (data base) after this table has been copied into the user file through the use of a COPY command. This copy will also disappear when the user finishes his session. 2.2 The Parsing Procedures 2.2.1 The Syntax Analyzer As can be seen in the preceding command descriptions, the actual commands of the system are characterized by having a set of clauses (between parentheses). It allows a very simple way for analyzing the 2k MONITOR WORK AREA READ PARSER AND MANIPULATION ROUTINES SYSTEM FILE TABLES OF THE SYSTEM TABLES OF THE USER Figure 2.1 Organization 25 ( MONITOR LOG ON COPY VOCABULARY AND SYMBOL TABLE 1 NTO THE USER FILE If READ PARSING PROCEDURES INTO MEMORY ' f PASS CONTROL TO THE PARSING PROGRAMS 1 READ CORRESPONDING ROUTINE FOR EXECUTION OF THE COM M A ND PASS CONTROL TO THE ROUTINE Figure 2.2 Very general flowchart of the monitor program, 26 parameters to be passed to each command subroutine. The syntax is analyzed in two different stages. The first one will determine if all of the clauses of the corresponding command are present. During this stage any symbol contained in a clause will be converted to a unique numerical terminal symbol. A clause is recognized whenever a left parenthesis appears in the command, into the clause the parenthesis are counted in the following form: each time a left parenthesis is found a counter is incremented by one, each time a right parenthesis appears one is subtracted from the counter. Whenever the counter becomes negative the clause is considered completed. A syntax director tree will check if the keys used in the command are the right ones in the right order. Each node in the tree contains the hash function of the corresponding symbol, the address of the character string corresponding to the symbol, one link which is chosen whenever the symbol represented by the node matches with the corresponding symbol in the input string, and a link which will indicate the node to be checked in the case that the input symbol does not match with the corresponding In Figure 2.3 an d 2.3.1 a graphical description of the tree is shown and in Figure 2.k a flowchart of a program for following it. After the syntax of the command is checked and the clauses have been transformed to terminal symbols, the control is passed to the monitor which is going to receive the address of the subroutine which is going to execute the command (relative position of the first record in the library file which contains the routine). In case of error an 27 REMOVE FROM ^CALCULATE SKETCH > INPUT DISPLAY > PRINT ^ COPY > COMPUTE ft ROTATE NEXTR NEXTL 5 NEXTD > NEXTU IN Figure 2.3 Syntax tree director. 28 (input) NODE i HASH FUNCTION OF THE CORRESPONDING IDENTIFIER. ADDRESS OF THE SYMBOL STRING- POINTER TO THE NEXT NODE IF THIS DOES NOT HOLD POINTER TO THE NEXT NODE IF THIS NODE HOLDS 1 REMOVEFROMCALCULATEINSKETCHINPUTDISPLAYPRINTCOPY. SYMBOL STRING Figure 2.3.1 A node of the syntax tree director. 29 node(i,j) represents the syntax analyser tree see figure 2.3 Figure 2.k Very general flowchart of the parser. 30 error message is printed out and the parsing procedure will keep the control of the system waiting for a new user command. In order to accomplish these goals the syntax analyzer makes use of the following subroutines : 1. GETSYMBOL 2 . GETCIAUSE 2.2.2 GETSYMBOL This subroutine will recover the different symbols (identifiers, constants and separators) from the source string. Then it will classify the symbols into the corresponding category (identifier, numerical constant, literal constant, separator or delimiter). Additionally, a hash function of the symbol will be calculated with the first four letters of the symbol (symbols with less than four characters will be filled with blanks) and the length of the symbol also returned to the calling routine. 2.2.3 GETCIAUSE This routine will recover the parameters contained in a clause. Then it is going to transform them to a unique numerical representation; with the numerical representation it is going to build up a string of numerical values, each one preceded by a number which will indicate what type of symbol is being represented. This string will later be passed to the routine which will execute the command and then be interpreted. A general flowchart of this routine is shown in Figure 2.5. GETCIAUSE makes use of the following subroutines: 1. GETSYMBOL (described in the preceding section) 2 . GETTEEMINAL -f !^ ■» OSTRING Represents the output string of terminal symbols Figure 2.5 Flowchart of GETCLAUSE. 32 2.2.1* GETTERMINAL This routine receives a SYMBOL, its length, and its hash function. It returns a unique numerical representation of the symbol. For this purpose the subroutine will use the hash function in order to get a token in the symbol table. If the position in the symbol table is busy then it will compare the length of the symbol with the second field of the corresponding position of the table. If the numbers are equal the contents of the first field will be used as the address of the symbol which corresponds to the position in the table. In other words this address will indicate the place where a string of characters will identify the symbol. Then the symbols are compared. If the symbols are different then the contents of the third field will be used as the address of a new token in the symbol table and the process described repeated until a Null pointer is found in the third field of a token. If no matching symbol is found in the table in the process then the new symbol is entered in the general string of symbols (see Figure 2.6). The address of this symbol, composed of the number of records (the general string of symbols is divided in different pages) and the relative position of the symbol in the record, will be recorded in the symbol table (see Figure 2.7) in the first position available. This value will also be returned as the terminal symbol of the symbol and it will be unique as a consequence of the fact that two symbols won't have the same address in the general string of symbols. 2.3 The Input Routine and the Internal Representation of the Tables The internal representation of the tables is maybe our most important feature. We want to have an accessable data base and versatile data management. 33 TERMINAL SYMBOL RELATIVE ADDRESS • RECORD ) J RECORD — » symbol mark symbol | mark symbol mark symbol n urk symbol mark symbol mark symbol mark Figure 2.6 Terminal symbol. 3U TERMINAL SYMBOL LENGTH POINTER HASH FUNCTION OVERFLOW AREA 1 2 A w 3 4 A V 5 •» • w* A w ! *- Figure 2.7 Symbol table. 35 The input routine is responsible for building up the tables according to the specifications of the user. This routine will receive an input string, will interpret it, and at the same time will structure the table. Any table in the system will have a representation as shown in Figure 2.8, where the description of the different fields is as follows: #ROW #COEUMNS FIRPOS TABLE NAME represents the number of rows of the table, represents the number of columns of the table, is the relative position of the first entry in the table (TABLE(l,l)) with respect to the address of the table. is the numerical terminal symbol for the name of the table. TERMINAL SYMBOL is the numerical terminal symbol of a row or OF THE LABEL column label. G.I. (general information about a linear element of the table) This field is composed of four bits of information. The leftmost bit indicates if the linear element is a row or a column (l means column). The next bit to the right indicates whether or not the label represents the lowest level in the hierarchy of the labels (a lowest level label does not have sons). The third bit to the right indicates if the name of the label given in "label terminal symbol" represents a terminal symbol of a string of characters or 36 ONE WORD A A/" ONE WORD A__ -\r ONE WORD * •COL »R W Fl R P S TABL E NAME Gl LEVEL BELONG TO R E L P S 41 OF SUBSCRIPT ELEMENTS TERMINAL SYMBOL OF THE LABEL • • • • • ■ • ■ • • • • • ■ MARK DATA T* B i L E R 1 E S E N T i \ F I R P S Gl COL OR ROW LOWEST LEVEL NUMBER OR LABE L bi t 3 bit 2 bit 1 bitO Figure 2.8 Table data structure. 37 BELONG TO is a simple number used as a label and as consequence "label terminal symbol" will contain the number by itself. The fourth bit has not been used. indicates who is the father of the corresponding label. If the father is represented by K, that means that the label corresponding to the father is the Kth label in the table, will indicate the level of the corresponding label. The label of "table name" is "0". allows the definition of subarrays of rows or columns as defined in the preceding chapter, indicates the relative position of the corresponding linear element. Whenever a label makes reference to a set of columns or rows the field RELPOS will represent the relative position of the leftmost column or the topmost row of the set. This structure allows almost any kind of addressing into the table. Having the actual representation, any entry of the table is addressable by the function: F=TABLE ADDRESS+FIRPOS+ (l*(#C0L)+ J )* length of an entry where I is the relative position of the row and J the relative position of the column. LEVEL NUMBER OF SUBSCRIPT ELEMENTS RELPOS 38 where Any column can be represented by the triple : x: TABLE ADDRESS+FIRFOS+(J*length of entry) y: #ROWS* length of entry z : #ROWS x will be the address of the first element of the column, y will be the distance between two elements of the column, z will be the number of elements of the column. Any row can be described by the following triple : x: table address+firpost+(l*(#COL)*length of entry) y: length of entry z : #columns x, y, z will represent the same parameters as described above. 2.h Input Routine (Flowchart Description) As can be seen in the general flowchart shown in Figure 2.9, whenever a left parenthesis is found the position of the last label in the structure it is recorded in the top of a stack. Whenever a new label becomes the top value in the stack it is recorded in the position corresponding to BELONG TO; after a right parenthesis appears the stack is popped. Also, it can be noted that a separator following an identifier (label) will always indicate a lowest level in the hierarchy then the preceding identifier is marked as lowest level. In order to keep track of the relative position of the columns and rows, a counter is incremented each time a lowest level attribute is recorded and also is incremented when explicit dimensions ($()) are 39 INPUT swx = o COUNTER =0 J-l ( GETSYMBOL J yes STR(l,'Cl(bitlV)=l SWX= 1 GETERMINAL STR(l,' label) ^TERMINAL GETSYMBOL GETSYMBOL GETERMINAL STR(l,'tablename'j ^TERMINAL SWICH - 1 RELPOSrO STR(l, ) represents a row of the strjcture shown in fjg. 2.8 Figure 2.9(a) General flowchart of the input routine. 1+0 STR(l,'GI(bitV') STR(l,'GI(bit2y>:l STR(|/BEL0NGT0') =STACK(J) JVMBOI rconstan K , "<» r f ERROR STR(l, LEVEL') =COUNTEP str(i,relpos'> = RELPOS SWX=0 STR(i;«SUBELEM.'j ^constant RELPOS RELPOS*constant-l COUNTEP^COUNTEP+l STACK(J)=I JaJ+1 STR(l,'Gl(bit2y)=0 C0UNTEP=C0UNTEP-1 1 = 1-1 SWICH-0 STRfi;«COL>RELPOS RELPOS a Figure 2.9(b) General flowchart of the input routine. 1+1 STR(l.'ttROW') = RELPOS Figure 2.9(c) General flowchart of the input routine. k2 defined by the system user. At this time the field #0F SUBSCRIPTS ELEMENTS is recorded. 2.5 The Command Execution After the monitor program has called the corresponding routine to execute the command the first thing to be done is to interpret the content of each one of the clauses. These are passed in the same order they appear in the source command. The parameters in the expressions are transformed first in the following way: 1. A column or a row label is changed for the address of the first element of the referenced linear element. 2. A variable is transformed to a constant (actual value of the variable). In routines corresponding to commands like REMOVE, CALCULATE and COMPUTE, where arithmetic or logical expressions may be present, the clause which contains the expression is converted to the polish postfix convention as an intermediate interpretable language. Then the expression is evaluated for each row (when the expression is a column expression) and after each evaluation the pointers in the expressions are incremented by the distance between two entries in the respective column of the table. When the case is a REMOVE command, after the evaluation of the expression for a row (or column) the respective label is marked if the result of the evaluation of the logical expression is "TRUE" (the expression holds for the row). In order to remove the respective labels k3 the table is recopied avoiding copying the elements referenced by a marked label. The parameters of the rest of the labels have to be readjusted. If the case now is a calculate command the table is recopied allowing a new column or a new row (if the left-hand part of the assignment statement is a new label) and then the new column or row is filled with the results of the expression evaluated. In order to implement the user variables, one record of the user file has been taken to be the user addressable memory. This record will contain the terminal name of the variable followed by the actual value of the variable. During the process of transformation of the variables in an expression to constant values, this record is read into memory. If the result (left-hand side of the assignment statement) of the evaluation is a variable, the new value of the variable will be copied into the record and then the record rewritten into the disk file. hk 3. SYSTEM EXPANSION In Chapter 1 a group of commands of our actual software system were described. However, they don't fulfill our wishes for a system capable of doing meaningful arithmetic and statistical operations on tables or between tables. In order to accomplish this goal, in this chapter additional system commands are going to be described and new capabilities are going to be proposed. Some of the new commands have their origin in the weaknesses observed in the few weeks the system has been in operation. Also a number of these commands are designed to give the user a powerful tool for implementing user subroutines or functions in order to develop proper tabulation methods. 3. 1 Output Commands Output features are the most important communication factor in any interactive information retrieval system. No matter what we do inside of the machine we must communicate to the user what the user wants to know. Users would like to find an identification on every piece of data they receive through the output devices. However, there physical, practical and economical factors which limit the amount of information that can be provided to users in order to identify this data. One of those limitations is that most output devices have limitations in the number of characters they can print in a line, as well as the number of lines (e.g., CRT). If we are going to display a table which contains h5 columns, and the columns are identified by corresponding labels then we have to compromise by choosing a very wide column size (number of characters used to display each entry of the column) with the corresponding waste of output space, or to restrict the size of the column to the maximum number of characters per entry with the corresponding restrictions on the length of the label of the column (usually the labels are much longer than the width of the columns). These restrictions are very important from the communication point of view. (Users want to know what is represented in each column. ) This suggests the possibility of abbreviating the labels in some recognizable way. However, users may not always be able to recognize all of the different abbreviations of the labels. It appears to be reasonable to provide the system with an abbreviation feature capable of recording the abbreviated label together with the original label for later translations. Then whenever the user does not recognize a label which has been abbreviated he might type: DICTIONARY ^abbreviated label>); and the system would answer with the original name of the label. Also, an equivalent feature could be provided to the print command in such a way that after a table is printed on the line printer the dictionary of the abbreviated labels is printed as an option of the user. Then after typing: PRINT (); the user may type: DICTIONARY; which will give to him a listing of the abbreviated labels accompanying the corresponding translation. Another factor which limits the amount of information which is communicated to the system user is that one table by itself may not be 1+6 self-explanatory. Then it may be advisable in some cases to give informa- tion such as how the data contained in the table was obtained or any other kind of information necessary to interpret the data which is contained in the table. For such purposes a new command should be available, say: COMMENT (); which will implement that information related with the table
  • . Another feature to be added to the actual output command is the possibility of displaying not only the complete table, but an entry, a column, a row or a group of entries, columns or rows. Then the display command shown in Chapter 1 may be modified to take the following form: DISPLAY () IN () and the command PRINT in the following form: PRINT () IN (); 3.2 Graphical Capabilities One important detail is to allow the user to make inferences about the information contained in the tables. One very good way of doing this is by allowing him to plot the different values contained in a column/ row on one plane like any graph of one variable vs. another variable. This allows the user to realize the behavior of the corresponding function. However, one of the best ways for a man to make inferences about any situation is to compare an actual situation with another known past situation. Under the same reasoning a user can realize that a function grows quadratically if he has a quadratic function to compare it with. Then it may be very helpful to provide the user with the possiblity of plotting different functions on the same graph. hi The SKETCH command described in Chapter 1 may take the following form LP SKETCH (,, ^ ) IN (); 3.3 Referencing the Data Contained in the Table In each one of the commands the system should allow the user to access a row, a column, or an entry in each of the following ways: A. by its relative position, B. by its label, C. by its content. A. The relative position of the column may be with respect to to the first column, (in case of rows) or with respect to the first column in a subarray when the column (row) belongs to one; or with respect to the first column (row) of the corresponding subset of columns (rows). B. By its label as described in most of the commands in Chapter 1. C. By its content as in the REMOVE command described in Chapter 1. Observation: Whenever a label can reference two different columns or rows the father of the label should be specified too. So A (B) will represent the column or row B whose father is A. Also, whenever a label can reference a row and a column at the same time, the attribute row (#) or the attribute column ( ' ) should be specified so #A will represent row A and 'A will represent column A. U8 For later operations (see user functions 3.7) it may be useful to allow the user to access some internal information about the structure of the table such as: A. whether a label is a row or a column, B. how many rows or columns the table has, C. the distance (measured in number of entries) between two elements of a row or column. 3.U Operations Between Two Tables The following operations are often performed manually on tables: A. Picking up a value from a table and then using it in a calculation in another table. B. Building up a table with the data contained in two or more tables. C. Expanding or updating a table with information contained in another table. The following commands are proposed to fulfill the described operations. BUILD () WITH () FROM () ACCORDING TO (); This command would allow the user to make new tables with the data contained in two or more tables. The description of the clauses is as follows: : :name of the table to be built. ::the list of columns or rows to be extracted from the different specified tables in order to be added to the table which is being built. h9 : :list of tables from where the data will come. : :name of the column or row to be used in order to match the position of the values to be taken from the different tables. For example: BUILD (NEWTABLE) WITH (A,B,C) FROM (TABLE1, TABLE2 ) ACCORDING TO (A); This command says that TABLE1 and TABLE2 have A in common. We want to build NEWTABLE with A, B and C of TABLE1 and TABLE2. The reference will be taken from a column or row made by merging the values of A in TABLE1 and TABLE2. Another command would be EXPAND () WITH () FROM () ACCORDING TO (^iame of common row/col>) where the reference will be the column or row () of As an example EXPAND () WITH () OF () ACCORDING TO (); This means that we want to expand tablel with the row/col (C) which belongs to table2. The row/col reference is A of tablel. 3.5 Arithmetic Operations Between Two Tables It was said in Chapter 1 that the COMPUTE command was designed to carry out arithmetic operations between two tables. What this meant was that the result of arithmetic operation between two tables (A, B) will be 50 another table (C) whose labels are the intersection of the labels of A and B, and whose entries are the result of the arithmetic operation between the corresponding entries of A and B. For example: COMPUTE (NEWTABLE=TABLE1+TABLE2); where TAB LEI is: A B c D E 1 2 3 k F 5 6 7 8 G 9 10 11 12 H 13 Ik 15 16 TABLE2 is: A H I D E 17 18 19 20 F 21 22 23 2k K 25 26 27 28 H 29 30 31 32 will produce NEW TABLE A D E 18 2k F 26 32 H k2 k8 51 3.6 Iterations In the references to columns and rows we are allowing the user to use the relative position of any column or row. This suggests to us that a user can also access the entries of a table as it is done in the array representation of most computer languages. If we allow the user some kind of iteration he may be capable of repeating a set of operations or even more, to organize a set of operations to be executed sequentially a number of times. He also may be capable of accessing different entries in the table according to some subscript scheme. In this case the user is allowed to have commands like: FOR $1=1 TO N DO; END or WHILE () DO: END which will be interpreted and executed iteratively whenever the command END is found. 3.7 User Functions It is essential to allow the user the definition of his own functions or tabulation methods which later would be used in the execution of a command. 52 Following the preceding proposals we are able to suggest such an approach. Let's say that a user wants to have a function MEAN to calculate the mean value of a column or row. He may create such a function in this way: FUNCTION (MEAN(A,B)); B : TABLE $Z=0; FOR 1=1 TO $: NUMBER (A) $Z=$Z+A(I) END RETURN ($Z=$Z/$:NUMBER(A)) END FUNCTION; where $:NUMBER(A) would be a built-in function which recovers the number of entries in the corresponding row/col. B: TABLE would mean that B is the table to be used in the function. $Z a variable. Note that the system should be provided with functions like: $: ROW number of rows in the table $: COLUMN number of columns in the table $: ENTRIES number of entries in the table 53 The user would use the defined function in the following way: CALCULATE (X=A+B-$C*@MEAN(A, TABLE) ) in (tablel); where NAME@() will be the reference to the function. 5h h. REMARKS In the actual implementation of the system, no considerations of efficiency were taken into account. What was wanted was to prove the feasibility of such a system and not how efficiently it could be. Actually, the author does not see major obstacles for making an efficient system for these purposes. A system like the one described in this paper may have multiple applications in education as an auxiliary teaching assistant, in the industry as a tool in order to implement tabulation methods , and as a complement of any bibliographic information retrieval system. No mention has been made about how to find a table a user is looking for. Actually, a version of the system is appended to a bibliographic information retrieval system, which is in charge of accomplishing these tasks. However, it is the thought of the author that this topic should be material for future developments, although it might be said that the labels in tables appear to be very good discriminators for most command searching procedures; as a consequence it may require a very simple retrieval system for accomplishing these goals. 55 BIBLIOGRAPHY 1. Cagan, Carl, Data Management Systems , Melville Pub. Co., Los Angeles, 1973. 2. Colin, A. J. T. , Introduction to Operating Systems , Mac don aid -American Elsevier, New York, 1971. 3. Donovan, John J., Systems Programming , McGraw-Hill, New York, 1972. h. Flores, Ivan, Data Structure and Management , Prentice-Hall, Englewood Cliffs, New Jersey, 1970. 5. Gries, David, Compiler Construction for Digital Computers , Wiley, New York, 1971. 6. Hansen, Brinch, Operating System Principles , Prentice-Hall, New Jersey, 1973. 7. Jahoda, Gerald, Information Storage and Retrieval Systems for Individual Researchers , New York, Wiley-Interscience, 1970. 8. Kent, Allen, Information Analysis and Retrieval , Becker and Hayes, New York, 1971. 9. Knuth, Donald E. , The Art of Computer Programming, Vol 1: Fundamental Algorithms , Addison-Wesley, Reading, Massachussetts, 1968. 10. , The Art of Computer Programming, Vol 3: Sorting and Searching , Addison-Wesley, Reading, Massachussetts, 11. Lefkovitz, David, Data Management for On Line Systems , Hayden Books, Rochele Park, New Jersey, 197*f. 12. McKeeman, William M. , A Compiler Generator , Prentice-Hall, Englewood Cliffs, New Jersey, 1970 „ 13. Meadow, Charles T. , The Analysis of Information Systems , Wiley, New York, 1967. 14. Pollack, Barry W., Compiler Techniques , Aurback Publishers, Princeton, New York, 1972 . 56 15. Salton, Gerard, The SMART Retrieval System , Prentice-Hall, Englewood Cliffs, New Jersey, 1971. 16. Schecter, George, Information Retrieval , Thompson Book Company, Washington, 1967. IBLIOGRAPHIC DATA HEET 1. Report No. UIUCDCS-R-75-70U 2. 3. Recipient's Accession No. Title and Subtitle A Computer Approach to the Manipulation of Tables 5. Report Date March 1975 6. Author(s) Ivan Hueck Ochea 8. Performing Organization Rept. No. Performing Organization Name and Address Department of Computer Science University of Illinois Urbana, Illinois 6l801 10. Project/Task/Work Unit No. 11. Contract /Grant No. DCR73-07980 A02 Sponsoring Organization Name and Address National Science Foundation Washington, D . C . 13. Type of Report & Period Covered 14. 1 plcmentary Notes . Abstracts An experimental software system for manipulation of tables is described; some relevant aspects of an actual implementation are explained. In the third chapter of this report, new commands and improvements to the actual system are proposed and in Chapter four some remarks about the applicability of such a system are pointed out. . Key Words and Document Analysis. 17a. Descriptors Table manipulation Data structure ;>• Idem if iers /Open-Ended Terms -• ( OSAT1 Field/Group 1 Availability Statement 19. Security Class (This Report) T INC J. A SSI F I ED 21. No. of Pages 62 20. Security Class (This Page UNCLASSIF ED 22. Price >=<5M NTIS-35 I 10-70) USCOMM-DC 40329-P7 1 %. ■ >*fe rift *v