W3C PICS

W3C PICS Simple Parser Example

Following is example output from the LablPars program:
(PICS-1.1 
 "http://www.ages.org/our-service/v1.0/"           1 
 labels   2 
  for "http://www.w3.org/pub/WWW/"   3   5 
  generic true 
  by "abaird@w3.org" 
  ratings (age 11)         6  -6  -5  -3 
   
  for "http://www.w3.org/pub/WWW/"   3   5 
  generic true 
  by "abaird@w3.org" 
  ratings (age 11)         6  -6  -5  -3 
  error (not-labeled "http://www.w3.org/unknown")    3  11 -11  -3 
   
 "http://www.rsac.org/v1.0" 
 labels  -2   2 
  for "http://www.w3.org/pub/WWW"   3   5 
  generic true 
  by "abaird@w3.org" 
  ratings (v 0 s 0 n 0 l 0)   6  -6   6  -6   6  -6   6  -6  -5  -3 
  for "http://www.w3.org/pub/WWW"   3   5 
  generic true 
  by "abaird@w3.org" 
  ratings (v 0 s 0 n 0 l 0)   6  -6   6  -6   6  -6   6  -6  -5  -3 
  error (not-labeled "http://www.w3.org/unknown")   3  11 -11  -3 
  
 error (no-ratings "unknown service"))  -2   2   9  -9  -2  -1 = 0 - parsing end
 

What you see

LablPars reads each line of its input and displays it before passing it to the parser. As the parser is reading the line, it makes callbacks to LablPars to notify when a new data type is being started or finished. This callback displays the enumerated value for the data type being processed.
LabelTargetCallback_t targetCallback;
StateRet_t targetCallback(CSLabel_t * pCSMR, CSParse_t * pCSParse, 
			  CSLLTC_t target, BOOL closed, void * pVoid)
{
    int change = closed ? -target : target;

    Total += change;
    printf("%3d ", change);
    return StateRet_OK;
}
These values are defined in CSLL.html.
typedef enum {
	CSLLTC_LIST = 1, 
	CSLLTC_SERVICE, 
	CSLLTC_LABEL, 
	CSLLTC_LABTREE, 
	CSLLTC_SINGLE, 
	CSLLTC_RATING, 
	CSLLTC_RANGE, 
	CSLLTC_AWKWARD, 
	CSLLTC_NORAT, 
	CSLLTC_SRVERR, 
	CSLLTC_LABERR, 
	CSLLTC_EXTEN, 
	CSLLTC_EXTDATA, 
	CSLLTC_COUNT
} CSLLTC_t;
We can see from the lines
 labels   2 
  for "http://www.w3.org/pub/WWW/"   3   5 
that the labels keyword told the parser that it had started a service, and the for keyword denoted a single-label within a label. As the parser finishes a data type, it calls the callback again to say that the data is finished:
 error (no-ratings "unknown service"))  -2   2   9  -9  -2  -1 = 0 - parsing end
"-2 -1" closes the service and the list. The sum of 0 shows that each data type entered was exited appropriately. "parsing end" shows that the parser had closed all data types and assumed that the input would be finished.


Eric Prud'hommeaux, libpics@w3.org, March 96