|
Section 1 - Block and Program Structure (12%) - Identify the difference between procedures and functions (including parameter/argument list, secondary entry, call BYVALUE, call BYREFERENCE, prototype entry declaration, recursive call)
- Write code that properly implements procedures and functions
- Write code that properly implements BEGIN blocks and DO groups
- Identify the scope of variables in a block/program
- Identify proper and improper use of function hierarchy and nesting
Section 2 - Language Fundamentals (25%) - Identify valid and invalid assignments
- Evaluate assignments for operator of various types
- Describe the proper usage of the basic numeric types (e.g. FIXED, FLOAT, DECIMAL, BINARY, PIC)
- Describe the proper usage of the basic string types (e.g. BIT, CHAR, WIDECHAR)
- Perform arithmetic between variables of different types
- Write code that correctly implements builtin functions and pseudo-variables. Representative examples:
- Arithmetic functions (MAX, MIN, MOD)
- Array-handling functions (DIMENSION, LBOUND, HBOUND)
- Buffer-management functions (COMPARE, XMLCHAR)
- Condition-handling functions (ONCHAR, ONCODE, ONWCHAR)
- Input/Output functions (COUNT, ENDFILE, FILEOPEN)
- Miscellaneous functions (HEX, PLIRETV, STRING)
- Precision-handling functions (BINARY, DECIMAL, UNSIGNED)
- Psedovariables (ONSOURCE, STRING, SUBSTR)
- Storage control functions (ADDR, NULL, SYSNULL)
- String-handling functions (BIT, CHAR, SUBSTR, TRANSLATE, WIDECHAR)
- Identify the proper specification of character and bit constants, both with and without hex
- Identify the proper specification of numeric constants including use of underscores
Section 3 - Declarations and Variable Scoping (12%) - Declare variables of various types and assign values
- Describe efficient initialization of special types (e.g. BIT, PICTURE)
- Evaluate the handling of aggregates (arrays, structures, unions, cell)
Section 4 - Flow Control and Exception / Condition Handling (15%) - Write code using all forms of loop constructs (e.g. labeled, unlabeled, nested, loop control)
- State the values taken by loop counter variables during and after loop execution and number of iterations
- Identify forms of loops that are implemented incorrectly (e.g. incorrect bounds, infinite loop)
- Write code using IF and SELECT statements
- Describe the use of ON UNIT and REVERT for proper exception/condition handling (e.g. ONCODE, ONSIZE)
- Identify proper use of checkout conditions
- Identify implications of using the SIGNAL statement
Section 5 - Pointers, Offsets, Controlled Variables and Areas (12%) - Write code that uses pointers to properly access program memory
- Use CONTROLLED variables correctly
- Identify proper usage of storage control (e.g. AUTO, STATIC, CONTROLLED, BASED, DEFINED, PARAMETER)
Section 6 - Compiling and Linking PL/I Programs (12%) - Differentiate between static and dynamic linkage conventions
- Describe what happens when FETCH and RELEASE statements are used
- Identify implications of using the different calling conventions (including BYVALUE vs. BYADDR)
- Validate execution of programs with preprocessor statements
- Analyze compiler messages to identify errors
Section 7 - Data Access (12%) - Write code that implements GET and PUT to move data from SYSIN and to SYSPRINT
- Recognize syntax for basic I/O handling for files (e.g. READ INTO, READ SET, WRITE, LOCATE)
- Recognize proper ENDFILE handling
- Recognize the separation between logical filename and physical dataset
- Identify issues associated with mismatched record lengths between logical and physical definition
|