MODULE index_adl_mod; ! Sets SET alpha ( 'a'..'z' OR 'A'..'Z' ); SET digit ( '0'..'9' ); ! Tokens TOKEN action_types { 'CALL' | 'EXECUTE' | 'RETURN_TO' | 'FORK' | 'START' | 'RESUME' }; TOKEN oparen ALIAS '(' { '(' }; TOKEN cparen ALIAS ')' { ')' }; TOKEN comma ALIAS ',' { ',' }; TOKEN semicolon ALIAS ';' { ';' }; TOKEN space IGNORE { { ' ' | s'ht' }... | s'vt' | s'eol' }; ! Last Tokens TOKEN identifier { alpha [ alpha | digit | '_' | '$']... }; ! Variables DECLARE index_string : STRING; DECLARE index_count : INTEGER; ! Macros ! procedure_def - Procedure that is called, with parameters MACRO procedure_def SYNTAX { procedure_name: identifier '(' identifier [',' identifier]... ')' }; ANSWER procedure_name; END MACRO /* procedure_def */; ! index_entry - Save all calls for indexing MACRO index_entry TRIGGER { action_types object_name: { procedure_def | identifier } ';' }; object_name = TRIM( object_name ); ! Save values, if not already indexed IF INDEX( index_string, object_name ) = 0 THEN index_string = index_string & '(' & object_name & '\( ex))' & s'eol'; END IF; END MACRO /* index_entry */; ! Procedures ! Index_adl - Return string of index entries from input ADL routine PROCEDURE index_adl ( adl_input : DYNAMIC STRING, index_returned : STRING ); DECLARE nl$ : dynamic string; DECLARE adl_procedure : DYNAMIC STRING; ! Initialize variables index_count = 0; index_string = ''; index_returned = ''; ! Make copy of adl_input, so changes aren't returned adl_procedure = adl_input; ! Scan start scan input string adl_procedure output string nl$; ! Return values index_returned = index_string; END PROCEDURE /* index_adl */; END MODULE /* index_adl_mod */;