Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TREES.C
- #include <stdlib.h>
- #include <stdio.h>
- #define NUMB 256
- #define NODE 257
- #define INS 258
- #define Lf 259
- extern int yylval;
- int symbol;
- typedef struct _node {
- int key;
- struct _node *l, *r;
- }node;
- node *T();
- node *E();
- void print_tree(node *, int);
- node *insert_node(int, node *);
- void next_symbol() {
- symbol = yylex();
- }
- void error() {
- printf("Syntax error\n");
- }
- void parser()
- {
- node *n = (node *)malloc(sizeof(node));
- n->key = 10;
- n->l = NULL;
- n->r = NULL;
- print_tree(E(), 0);
- if (symbol != '\n')
- error();
- }
- node *E() {
- node *res;
- if (symbol == INS) {
- next_symbol();
- res = (node *)malloc(sizeof(node));
- if (symbol == NUMB) {
- int toInsert = yylval;
- next_symbol();
- res = E();
- node *insertRes = (node *)malloc(sizeof(node));
- insertRes = insert_node(toInsert, res);
- return insertRes;
- }
- }
- else
- if (symbol == '(') {
- next_symbol();
- node *res2 = (node *)malloc(sizeof(node));
- res2 = E();
- if (symbol == ')') {
- next_symbol();
- }
- else
- error();
- return res2;
- }
- else
- if (symbol == NODE)
- return T();
- return res;
- }
- node *T() {
- node *res;
- if (symbol == NODE) {
- next_symbol();
- res = (node *)malloc(sizeof(node));
- res->l = T();
- if (symbol == NUMB) {
- res->key = yylval;
- next_symbol();
- res->r = T();
- }
- return res;
- }
- else {
- if (symbol == Lf) {
- next_symbol();
- return NULL;
- }
- else {
- if (symbol == '(') {
- next_symbol();
- res = T();
- if (symbol == ')') {
- next_symbol();
- }
- else
- error();
- }
- else
- error();
- return res;
- }
- }
- }
- void print_tree(node *tree, int level) {
- if (tree != NULL) {
- int i;
- for (i = 0; i < level; i++)
- printf("\t");
- printf("%d\n", tree->key);
- print_tree(tree->l, level + 1);
- print_tree(tree->r, level + 1);
- }
- }
- node *insert_node(int nr, node *tree) {
- if (tree == NULL) {
- tree = (node *)malloc(sizeof(node));
- tree-> key = nr;
- tree->l = NULL;
- tree->r = NULL;
- return tree;
- } else {
- if (nr < tree->key) {
- tree->l = insert_node(nr, tree->l);
- return tree;
- }
- else {
- tree->r = insert_node(nr, tree->r);
- return tree;
- }
- }
- }
- void main() {
- next_symbol();
- while (symbol != 0) {
- parser();
- next_symbol();
- }
- }
- -----------------------------------------------------------
- TREES.L
- %{
- #include <stdlib.h>
- #include <stdio.h>
- #define NUMB 256
- #define NODE 257
- #define ins 258
- #define Lf 289
- int yylval;
- %}
- %%
- [+()\n] { return *yytext; }
- [0-9]+ { yylval = atoi(yytext);
- return NUMB; }
- "Node" { return NODE; }
- "insert" { return ins; }
- "Lf" { return Lf; }
- %%
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement