]> pd.if.org Git - json/blob - json.y
initial commit
[json] / json.y
1 //%start_symbol complete_command
2 //%token_prefix TOKEN_
3 %token_type {struct token}
4 %extra_argument { struct parser *pstate }
5 %include {
6 #include "scan.h"
7 #include "filter.h"
8 #include <assert.h>
9 #include <stdlib.h>
10 }
11 %name jsonp
12
13 %parse_failure {
14      fprintf(stdout,"Giving up.  Parser is hopelessly lost...\n");
15         exit(1);
16 }
17
18 /*
19 %syntax_error {
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");
24         }
25         {
26                 int i;
27                 for (i=0;i<pstate->pos-1;i++) {
28                         fprintf(stdout, " ");
29                 }
30                 fprintf(stdout, "^\n");
31         }
32         pstate->reset = 1;
33 }
34 */
35
36
37 list ::= jlist.
38
39 jlist ::= jsons.
40 jlist ::= jsons jlist.
41
42 jsons ::= json. { printf("END\n"); }
43 /*jsons ::= error. { printf("starting over after error\n"); } */
44
45 json ::= value. { printf("JSON\n"); }
46
47 object ::= lbrace rbrace. { printf("OBJECT(empty)\n"); }
48 object ::= lbrace members rbrace. { printf("OBJECT\n"); }
49
50 lbrace ::= LBRACE. { printf("OBJECT start\n"); }
51 rbrace ::= RBRACE. //{ printf("OBJECT close\n"); }
52
53 members ::= pair. // { printf("members\n"); }
54
55 members ::= pair COMMA members. // { printf("members comma\n"); }
56
57 pair ::= STRING(A) COLON value. { printf("pairkey(\"%s\")\n", A.str); }
58
59 //array ::= error.
60
61 lbracket ::= LBRACKET. { printf("ARRAY start\n"); }
62 rbracket ::= RBRACKET. //{ printf("ARRAY close\n"); }
63
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"); }
67
68 elements ::= value. // { printf("elements\n"); }
69
70 elements ::= value COMMA elements. // { printf("elements comma\n"); }
71
72 value ::= literal.
73 value ::= object.
74 value ::= array.
75
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"); }
81