/* YACC spefication of URI grammar */ /* $Id: url-formal.y,v 1.5 1994/05/11 22:36:57 connolly Exp $ */ %token WORD /* string of data characters and escape squences, i.e. DATA = [-*\.0-9@A-Z_a-z] (see isAcceptable in HTParse.c) HEX = [0-9A-F] WORD = ({DATA}|%{HEX}{HEX})+ */ ; %union{ char *string; }; %type WORD %type scheme filename fragmentid keyword value words %% href : relative fragmentOpt | uri fragmentOpt ; relative : path fragmentOpt { printf("This is a relative URI.\n"); } ; uri : scheme ':' path paramsOpt searchOpt ; path : /* void */ | '/' { printf("absolute\n"); } path | filename | filename '/' { printf("subdir\n"); } path ; paramsOpt : /* void */ | ';' params ; params : keyword '=' value | keyword '=' value ';' params ; fragmentOpt : /* void */ | '#' fragmentid ; searchOpt : /* void */ | '?' { printf("searchable...\n"); } searchStuff ; searchStuff: /* void */ | words | params ; words : WORD { printf("search: %s\n", $1); }; scheme : WORD { printf("scheme: %s\n", $1); }; filename : WORD { printf("filename: %s\n", $1); }; keyword : WORD { printf("keyword: %s\n", $1); }; value : WORD { printf("value: %s\n", $1); }; fragmentid : WORD { printf("fragment-id: %s\n", $1); }; %% yywrap() { return 1; }