ProgressParser is an extended version of CommandExtractor used to parse 4GL source code. ProgressParser, however, can recognize some commands like ASSIGNs, FORs, DOs, IFs, etc.
| Line | Type | Code |
|---|---|---|
| 1 | Comment | /*********************************************** ** This is a sample source code for testing ** parser. ** Author: Flavio Eduardo de Córdova ***********************************************/ |
| 6 | Define |
DEFINE TEMP-TABLE ttLogging NO-UNDO
FIELD custName AS CHARACTER
FIELD callDuration AS DECIMAL
INDEX custName
custName. |
| 12 | Define |
DEFINE TEMP-TABLE ttSumary NO-UNDO
FIELD custName AS CHARACTER
FIELD totalDuration AS DECIMAL. |
| 16 | Run | RUN generateRandomData. |
| 17 | Run | RUN sumarize. |
| 18 | Run | RUN cleanUp. |
| 21 | Procedure | PROCEDURE generateRandomData PRIVATE: |
| 22 | Preprocessor |
&SCOPED-DEFINE EXTENT_SIZE 5 |
| 23 | Define |
DEFINE VARIABLE cAvailableCustomers AS CHARACTER EXTENT {&EXTENT_SIZE} NO-UNDO
INITIAL ["~"cust1~"", '"cust2"', "'cust3'", '~'cust4~'', "cust5"]. |
| 26 | Define |
DEFINE VARIABLE iEntries AS INTEGER NO-UNDO. |
| 28 | Named Block |
generation: |
| 29 | Do |
DO iEntries = 1 TO 100: |
| 30 | Create |
CREATE ttLogging. |
| 31 | Assign |
ASSIGN
ttLogging.custName = cAvailableCustomers[(iEntries MOD {&EXTENT_SIZE}) + 1]
ttLogging.callDuration = RANDOM(1, 1500) / 100. |
| 34 | End |
END. |
| 35 | End | END. |
| 37 | Procedure | PROCEDURE sumarize PRIVATE: |
| 38 | Define |
DEFINE BUFFER ttLoggingBuffer FOR ttLogging. |
| 39 | For |
FOR EACH ttLoggingBuffer
BREAK BY ttLoggingBuffer.custName: |
| 41 | If |
IF FIRST-OF(ttLoggingBuffer.custName) THEN |
| 41 | Do |
DO: |
| 42 | Create |
CREATE ttSumary. |
| 43 | Assign |
ttSumary.custName = ttLoggingBuffer.custName. |
| 44 | End |
END. |
| 45 | Assign |
ttSumary.totalDuration = ttSumary.totalDuration + ttLoggingBuffer.callDuration. |
| 46 | End |
END. |
| 47 | End | END. |
| 49 | Procedure | PROCEDURE cleanUp PRIVATE: |
| 50 | For |
FOR EACH ttSumary
EXCLUSIVE-LOCK: |
| 52 | Delete |
DELETE ttSumary. |
| 53 | End |
END. |
| 55 | For |
FOR EACH ttLogging
EXCLUSIVE-LOCK: |
| 57 | Delete |
DELETE ttLogging. |
| 58 | End |
END. |
| 59 | End | END. |
The table below shows the Java code used to extract Progress statements:
import net.cordova.justus.progressparser.*;
import java.io.*;
public class MyTest implements CommandListener {
public static void main(String args[]) {
File f = new File(args[0]);
try {
ProgressParser extractor = new ProgressParser(f);
extractor.addCommandListener(new MyTest());
extractor.analiseCode();
}
catch(Exception e) {
Sysout.err.println("Error: " + e.getMessage());
}
}
public void commandRead(ProgressStatement command) {
System.out.println(command);
}
} |