96 lines
2.0 KiB
Plaintext
96 lines
2.0 KiB
Plaintext
/* Yacc / Bison hl test file.
|
|
* It won't compile :-) Sure !
|
|
*/
|
|
|
|
%{
|
|
|
|
#include <iostream>
|
|
using namespace std;
|
|
|
|
extern KateParser *parser;
|
|
|
|
%}
|
|
|
|
%locations
|
|
|
|
%union {
|
|
int int_val;
|
|
double double_val;
|
|
bool bool_val;
|
|
char *string_val;
|
|
char *ident_val;
|
|
struct var *v;
|
|
void *ptr;
|
|
}
|
|
|
|
%token <int_val> TOK_NOT_EQUAL "!="
|
|
%token <int_val> TOK_LESSER_E "<="
|
|
%token <int_val> TOK_GREATER_E ">="
|
|
%token <int_val> TOK_EQUAL_2 "==" //comment
|
|
%token
|
|
PERCENT_DEBUG "%debug"
|
|
PERCENT_DEFAULT_PREC "%default-prec"
|
|
PERCENT_DEFINE "%define"
|
|
;
|
|
|
|
%type <int_val> type type_proc
|
|
|
|
%code top {
|
|
#define _GNU_SOURCE
|
|
#include <stdio.h>
|
|
int val;
|
|
}
|
|
|
|
%destructor { free ($$); printf ("%d", @$.first_line); } <*>
|
|
%lex-param {scanner_mode *mode};
|
|
%parse-param {int *nastiness} {int *randomness}
|
|
%initial-action {
|
|
@$.initialize (file_name);
|
|
};
|
|
|
|
%%
|
|
|
|
prog: KW_PROGRAM ident { parser->start($2); } prog_beg_glob_decl instructions { parser->endproc(0); } dev_procedures KW_ENDP ;
|
|
|
|
number: integer_number
|
|
| TOK_DOUBLE
|
|
{
|
|
$$ = new var;
|
|
$$->type = KW_REEL;
|
|
$$->cl = var::LITTERAL;
|
|
$$->real = $<int_val>1;
|
|
};
|
|
words:
|
|
%empty
|
|
| words word
|
|
;
|
|
|
|
%type <type> word;
|
|
%printer { fprintf (yyo, "%s", word_string ($$)); } <type>;
|
|
word:
|
|
%?{ boom(1); }
|
|
| "hello" { $$ = hello; }
|
|
| "bye" { $$ = bye; }
|
|
;
|
|
|
|
foo: { $$ = 0 }
|
|
| number { $$ = $1 | $2; }
|
|
| hello { $$ = $1 | $3; } // without a comma
|
|
|
|
hello:
|
|
gram1 { $$ = "hi" };
|
|
| gram2
|
|
;;
|
|
|
|
%%
|
|
|
|
#include <stdio.h>
|
|
|
|
int main(void)
|
|
{
|
|
puts("Hello, World!");
|
|
return 0;
|
|
}
|
|
|
|
// ALERT NOTE
|