Транслятор з мови програмування Pascal на С++
19

Лістинг програми

Головний модуль PAStoCPP.cpp

 

#include <iostream.h>

#include <fstream.h>

#include <conio.h>

#include <cach.cpp>

 

// перерахування

enum {

         PROGRAM, USES, PROCEDURE, FUNCTION, INTEGER, SHORTINT,

         SMALLINT, LONGINT, BYTE, WORD, REAL, SINGLE, DOUBLE, EXTENDED, PCHAR,        

         BOOLEAN, POINTER, CHAR, ARRAY, OF, STRINGIN, VAR, PRST, BEGIN, END, FOR,

         TO, DO, THEN, AND, OR, IF, WHILE, CASE, ELSE, PRISVOIT,

         REPEAT, UNTIL, RETURN, TRUE, FALSE, READLN, READ, WRITELN, WRITE, CLRSCR,

         CONST, TYPE, IMPLEMENTATION, DIV, MOD, XOR, INC, DEC, COS, SIN, TAN, SQRT

     };

 

// строковий масив ключових слів мови PASCAL     

char* chg[] = {

                "PROGRAM", "USES", "PROCEDURE", "FUNCTION", "INTEGER", "SHORTINT",

                "SMALLINT", "LONGINT", "BYTE", "WORD", "REAL", "SINGLE", "DOUBLE",

                "EXTENDED", "PCHAR", "BOOLEAN", "POINTER", "CHAR", "ARRAY",

                "OF","STRING", "VAR", "..", "BEGIN", "END", "FOR", "TO",

                "DO", "THEN", "AND", "OR", "IF", "WHILE", "CASE", "ELSE", ":=",

                "REPEAT", "UNTIL", "RETURN", "TRUE", "FALSE", "READLN", "READ",

                "WRITELN", "WRITE", "CLRSCR", "CONST", "TYPE", "IMPLEMENTATION",

                "DIV", "MOD", "XOR", "INC", "DEC", "COS", "SIN", "TAN", "SQRT"

              };

 

// функція заміни ключових слів, отримує в якості аргументу

// строку ісходного файлу і проводить обробку             

string convertcpp(char *_buff)

{

  // статичні змінні

  static bool firstFlag = true, ElseInCase, InSwitch, InProcedure, InVar, InMain;

  // логічні змінні

  bool Var = false, finish, InFor = false, ItIsComents, finishk;

 

  // внутрішні змінні