1 //%start_symbol complete_command
3 %token_type {struct token}
4 %extra_argument { struct parser *pstate }
14 fprintf(stdout,"Giving up. Parser is hopelessly lost...\n");
20 fprintf(stdout,"syntax error on line %d, character %d, trying to recover...\n", pstate->lineno+1, pstate->pos);
21 fprintf(stdout, "%s", pstate->line);
22 if (pstate->line[strlen(pstate->line)] != '\n') {
23 fprintf(stdout, "\n");
27 for (i=0;i<pstate->pos-1;i++) {
30 fprintf(stdout, "^\n");
40 jlist ::= jsons jlist.
42 jsons ::= json. { printf("END\n"); }
43 /*jsons ::= error. { printf("starting over after error\n"); } */
45 json ::= value. { printf("JSON\n"); }
47 object ::= lbrace rbrace. { printf("OBJECT(empty)\n"); }
48 object ::= lbrace members rbrace. { printf("OBJECT\n"); }
50 lbrace ::= LBRACE. { printf("OBJECT start\n"); }
51 rbrace ::= RBRACE. //{ printf("OBJECT close\n"); }
53 members ::= pair. // { printf("members\n"); }
55 members ::= pair COMMA members. // { printf("members comma\n"); }
57 pair ::= STRING(A) COLON value. { printf("pairkey(\"%s\")\n", A.str); }
61 lbracket ::= LBRACKET. { printf("ARRAY start\n"); }
62 rbracket ::= RBRACKET. //{ printf("ARRAY close\n"); }
64 //array ::= lbracket error rbracket. { printf("ARRAY(error)\n"); }
65 array ::= lbracket rbracket. { printf("ARRAY(empty)\n"); }
66 array ::= lbracket elements rbracket. { printf("ARRAY\n"); }
68 elements ::= value. // { printf("elements\n"); }
70 elements ::= value COMMA elements. // { printf("elements comma\n"); }
76 literal(A) ::= STRING(B). { printf("LITERAL STRING(\"%s\")\n", B.str); A = B; }
77 literal ::= NUMBER(A). { printf("LITERAL NUMBER(\"%s\" = %f)\n", A.str, atof(A.str)); }
78 literal ::= LITTRUE. { printf("LITERAL true\n"); }
79 literal ::= LITFALSE. { printf("LITERAL false\n"); }
80 literal ::= LITNULL. { printf("LITERAL null\n"); }