Littel example how work compiler
Delphi & Pascal (česká wiki)
Category: Programs in C, C++
Program: Compiler.c
File exe: Compiler.exe
need: Klavesy.h, Struct.h
Example: Prog.c
Program: Compiler.c
File exe: Compiler.exe
need: Klavesy.h, Struct.h
Example: Prog.c
Littel example how work compiler. It's a easy compiler. You only locate syntax error, don't translate to bin code. IDE is know from common work with C compiler.
// STRUCT.H Copyright (c) TrSek alias Zdeno Sekerak // Program je sucastou programu Compiler.c // // Datum:22.04.96 http://www.trsek.com typedef struct { void *pred; char znaky[maxznak]; void *zani; } def_riadok; typedef struct { void *pred; char znaky[maxsyn]; void *zani; } def_syntax; typedef struct { void *pred; char error[maxsyn]; int err; void *zani; } def_error; def_riadok *riadok; /* Natlaci subor */ def_syntax *syntax; /* Natlaci syntax */ def_error *error; /* Objavia sa chyby */ // zaradi riadok do zoznamu def_riadok *zaradr( def_riadok *pointer, char text[] ) { def_riadok *pomocny,*pomocny2; pomocny=malloc(sizeof((*riadok))); if (pomocny==NULL) return(NULL); strcpy((*pomocny).znaky,text); (*pomocny).pred=pointer; (*pomocny).zani=NULL; if (pointer!=NULL) { if ((*pointer).zani!=NULL) { pomocny2=(*pointer).zani; (*pointer).zani=pomocny; (*pomocny).zani=pomocny2; pomocny2=(*pomocny).zani; (*pomocny2).pred=pomocny; } (*pointer).zani=pomocny; } return(pomocny); } // vyhodi riadok zo zoznamu def_riadok *vyhodr( def_riadok *pointer ) { def_riadok *pomocny; pomocny=NULL; if (pointer==NULL) return(NULL); if ((*pointer).pred!=NULL) { pomocny=(*pointer).pred; (*pomocny).zani=(*pointer).zani; } if ((*pointer).zani!=NULL) { pomocny=(*pointer).zani; (*pomocny).pred=(*pointer).pred; } else { pomocny=(*pointer).pred; (*pomocny).zani=NULL; } free(pointer); return(pomocny); } // def_syntax *zarads( def_syntax *pointer, char text[] ) { def_syntax *pomocny,*pomocny2; pomocny=malloc(sizeof(( * syntax))); if (pomocny==NULL) return(NULL); strcpy((*pomocny).znaky,text); (*pomocny).pred=pointer; (*pomocny).zani=NULL; if (pointer!=NULL) { if ((*pointer).zani!=NULL) { pomocny2=(*pointer).zani; (*pointer).zani=pomocny; (*pomocny).zani=pomocny2; pomocny2=(*pomocny).zani; (*pomocny2).pred=pomocny; } (*pointer).zani=pomocny; } return(pomocny); } // def_syntax *vyhods( def_riadok *pointer ) { def_syntax *pomocny; pomocny=NULL; if (pointer==NULL) return(NULL); if ((*pointer).pred!=NULL) { pomocny=(*pointer).pred; (*pomocny).zani=(*pointer).zani; } if ((*pointer).zani!=NULL) { pomocny=(*pointer).zani; (*pomocny).pred=(*pointer).pred; } else { pomocny=(*pointer).pred; (*pomocny).zani=NULL; } free(pointer); return(pomocny); } // def_error *zarade( def_error *pointer, char text[] , int err) { def_error *pomocny,*pomocny2; pomocny=malloc(sizeof(( * error))); if (pomocny==NULL) return(NULL); strcpy((*pomocny).error,text); (*pomocny).err=err; (*pomocny).pred=pointer; (*pomocny).zani=NULL; if (pointer!=NULL) { if ((*pointer).zani!=NULL) { pomocny2=(*pointer).zani; (*pointer).zani=pomocny; (*pomocny).zani=pomocny2; pomocny2=(*pomocny).zani; (*pomocny2).pred=pomocny; } (*pointer).zani=pomocny; } return(pomocny); } // def_error *vyhode( def_error *pointer ) { def_error *pomocny; pomocny=NULL; if (pointer==NULL) return(NULL); if ((*pointer).pred!=NULL) { pomocny=(*pointer).pred; (*pomocny).zani=(*pointer).zani; } if ((*pointer).zani!=NULL) { pomocny=(*pointer).zani; (*pomocny).pred=(*pointer).pred; } else { pomocny=(*pointer).pred; (*pomocny).zani=NULL; } free(pointer); return(pomocny); }