git » unicorn-sparkle-basic.git » line-edit-recall » tree

[line-edit-recall] / usbasic.y

%{
#include <stdio.h>
#include <stdlib.h>
#include "parse.h"
extern int yylex();
extern int yyparse();
extern FILE *yyin;

void yyerror(const char *s) {
    fprintf(stderr, "Error: %s\n", s);
}
%}

%union {
  int num_int;
  char *id;
  char *str;
  struct node_tag *node;
}

%token <num_int> NUMBER_INTEGER
%token <id> IDENTIFIER
%token <str> STRING
%token PRINT IF THEN GOTO LT LTE GT GTE EQ

%type <node> line
%type <node> expression
%type <node> statement

%define parse.error verbose

%left '+' '-'
%left '*' '/'

%%
line:
    NUMBER_INTEGER statement {
      $$ = ast_make_numbered_line($1, $2);
    }
    ;

statement:
    PRINT expression {
      $$ = ast_make_print($2);
    }
    | IF expression THEN statement {
      $$ = ast_make_if($2, $4);
    }
    ;

expression:
    IDENTIFIER {
      $$ = ast_make_id($1);
    }
    | STRING {
      $$ = ast_make_string($1);
    }
    | NUMBER_INTEGER {
      $$ = ast_make_number_integer($1);
    }
    /* | expression '+' expression */
    /* | expression '-' expression */
    /* | expression '*' expression */
    /* | expression '/' expression */
    /* | expression LT expression */
    /* | expression LTE expression */
    /* | expression GT expression */
    /* | expression GTE expression */
    ;
%%