2 * FML interpreter. Europagate, 1995
5 * Revision 1.1 1995/02/06 13:48:09 adam
17 static char lex_buf[FML_MAX_TOKEN];
19 static void lexer (Fml fml);
21 struct fml_node *fml_group (Fml fml);
23 struct fml_node *fml_tokenize (Fml fml)
27 look_char = (*fml->read_func)();
37 void fml_pr_list (struct fml_node *p)
46 fml_atom_str (p->p[0], buf);
52 fml_pr_list (p->p[0]);
59 struct fml_node *fml_group (Fml fml)
61 struct fml_node *ptr0 = NULL, *ptr1, *ptr2;
70 ptr2 = fml_node_alloc (fml);
75 ptr2->p[0] = fml_atom_alloc (fml, lex_buf);
78 else if (look_type == '{')
80 struct fml_node *sptr = fml_group (fml);
84 ptr2 = fml_node_alloc (fml);
102 ptr2 = fml_node_alloc (fml);
118 static void lexer (Fml fml)
123 if (look_char == fml->eof_mark)
128 else if (look_char == fml->comment_char)
131 look_char = (*fml->read_func)();
132 while (look_char != '\n' && look_char != fml->eof_mark);
136 if (!strchr (fml->white_chars, look_char))
138 look_char = (*fml->read_func)();
141 if (look_char == '{')
144 look_char = (*fml->read_func)();
146 else if (look_char == '}')
149 look_char = (*fml->read_func)();
156 lex_buf[off++] = look_char;
157 look_char = (*fml->read_func)();
158 } while (look_char != fml->eof_mark
159 && !strchr (fml->white_chars, look_char)
160 && look_char != '{' && look_char != '}');
167 if (look_type == 'a')
168 printf ("[%s]", lex_buf);
170 printf ("[%c]", look_type);