singh@tove.cs.umd.edu (Ram Naresh Singh) (03/15/91)
Hi! I am having some problem in running a module whose source c files are combination of yacc generated c files and devguide generated(a graphic user interface application building program) c files. Devguide generated c files work well if I link it with a simple c file. I don't get linking error in linking devguide generated c file with a yacc generated c file. But the moment I run the program, at very first c statement in main() I get "Illegal Instruction(Core Dump)". This first statement is a library call and thus I can't look up the source statement in my debuger. Again if I leave out the yacc module, every thing runs great. Also yacc generated program runs fine independently. I am running this on a SPARCS station 1+ and in OPENWINDOWS under SUNOS 4.1. Any help would be appreciated to solve the above problem. Thanks in advance. RAM email - singh@cs.umd.edu Voice - 405-2725 ---------------------------------------- YACC File ---------------------------------------- %{ #include <stdio.h> #include <ctype.h> #define TRUE 1 /* New hash definition */ #define FALSE 0 /* New hash definition */ #define NORMAL 1 #define DEPT_MODE 2 #define HOGS_MAX -1 #define HOGS_MIN -2 #define VALUE_UNKNOWN -5 #define MAX_NAME_LEN 20 #define MAX_CHILDREN 20 #define MAX_LEVELS 40 /* New hash definition */ #define MAX_NODES 1000 typedef struct node { struct node *parent_ptr; char node_level; char dept_name[MAX_NAME_LEN]; long total; long salary; long average; long hogs; short child_index; long cum_sal; /* New field */ char leaf; /* New field */ char next; /* New field */ struct node *level_ptr; /* New field */ struct node *child_ptr[MAX_CHILDREN]; }node; node *root_ptr, *temp_ptr, *curr_ptr; long buff_track[MAX_NODES]; node *level_ptr[MAX_LEVELS]; /* New variable */ int loop_var, buff_count = 0; int level_index = 0; /* New variable */ char terminator = '$'; char dept_name[20][20]; int same_level = 0; int node_flag = 0; int disp_flag = 0; int mode = NORMAL; int index = 0; %} %start list %token DIGIT LOWER UPPER ALPHA %% list : | list stat '#' { your_function(); node_flag = 0; disp_flag = 0; level_index = 0; /* New statement */ printf("\nTotal nodes = %d", buff_count); for (loop_var = 0; loop_var < buff_count; loop_var++) free((char *)buff_track[loop_var]); buff_count = 0; } | list error {exit(1);} ; stat : '(' decl expr ')' | '$' {printf("\nParsing is thru'");exit(1);} ; decl : '(' decl_sal decl_avg decl_hog ')' ; decl_sal : '(' key_sal type_sal ')' ; decl_avg : '(' key_avg type_avg ')' ; decl_hog : '(' key_hog type_hog ')' ; key_sal : 's' 'a' 'l' 'a' 'r' 'y' ; type_sal : 'i' 'n' 't' 'e' 'g' 'e' 'r' | 'l' 'o' 'n' 'g' ; key_avg : 'a' 'v' 'e' 'r' 'a' 'g' 'e' '_' 's' 'a' 'l' 'a' 'r' 'y' ; type_avg : 'i' 'n' 't' 'e' 'g' 'e' 'r' | 'l' 'o' 'n' 'g' ; key_hog : 'h' 'o' 'g' 's' ; type_hog : 'i' 'n' 't' 'e' 'g' 'e' 'r' | 'l' 'o' 'n' 'g' ; expr : '(' '"' dept '"' tot '[' sal sum ']' '[' avg average ']' '[' hog max ']' ')' | '(' '"' dept '"' tot '[' sal sum ']' '[' avg average ']' '[' hog max ']' expr ')' | expr expr ; dept : ALPHA | dept ALPHA; tot : 's' 'u' 'm' {curr_ptr->total = VALUE_UNKNOWN;} | number {curr_ptr->total = $1;} ; sum : 's' 'u' 'm' {curr_ptr->salary = VALUE_UNKNOWN;} | number {curr_ptr->salary = $1; curr_ptr->cum_sal = $1;} ; sal : 's' 'a' 'l' 'a' 'r' 'y'; avg : 'a' 'v' 'e' 'r' 'a' 'g' 'e' '_' 's' 'a' 'l' 'a' 'r' 'y'; average : 'a' 'v' 'e' 'r' 'a' 'g' 'e' {curr_ptr->average = VALUE_UNKNOWN;} | number {curr_ptr->average = $1;} ; hog : 'h' 'o' 'g' 's'; max : 'm' 'a' 'x' {curr_ptr->hogs = HOGS_MAX;} | 'm' 'i' 'n' {curr_ptr->hogs = HOGS_MIN;} | number {curr_ptr->hogs = $1;} ; number : DIGIT {$$ = $1;} | number DIGIT {$$ = 10 * $1 + $2;} ; %%