Проектирование приложения, осуществляющего синтаксический анализ программы
Решение задач синтаксического анализа простой программы. Алгоритм нахождения синтаксических ошибок в ее тексте. Вывод данных о местоположении ошибки. Проектирование программы анализа арифметического выражения и методы проверки его на сумму или разность.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 01.07.2011 |
Размер файла | 2,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
printf("Вы ввели неправильное выражение, введите заного\n");
flag=true;
}
if (cnt!=0)
{
printf("Найдено несовпадение скобок\n");
flag=true;
}
}while(flag);
for (i=0; string[i]!=0; i++)
{
if (string[i]=='(') cnt++;
if (string[i]==')') cnt--;
if (!cnt)
{
if (string[i]=='+') cnt1++;
if (string[i]=='-') cnt1--;
}
}
if (cnt1)
{
if (cnt1>0) printf("Введенное выражение сумма\n");
if (cnt1<0) printf("Введенное выражение разность\n");
}
else printf("Выражение не содержит ни суммы ни разности\n");
}
Исходный код программы анализа простой программы на языке С.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define bool char
#define true 1
#define false 0
int Number_of_strings(FILE *fl){
char tmp=getc(fl);
int n=0;
while(tmp!=EOF){
if (tmp=='\n') n++;
tmp=getc(fl);
}
return n;
}
void Move_strings1(char a[][80], char d[2], int row, int start, int rep){
int i=0, j=0;
for (j=0; j<rep; j++){
if (d=="<<"){
for (i=start; i<79; i++) a[row][i]=a[row][i+1];
}
if(d==">>"){
for (i=79; i>=start; i--) a[row][i]=a[row][i-1];
a[row][start]=' ';
}
}
}
void Comment_killer(char code[][80],int n_str){
int i=0, j=0, cnt=0;
int err_row=0, err_col=0;
for (i=0; i<n_str; i++){
for (j=0; code[i][j]!=0; j++){
if (code[i][j]=='/'&&code[i][j+1]=='*') {cnt++; err_row=i; err_col=j;}
if (code[i][j]=='*'&&code[i][j+1]=='/') cnt--;
if (cnt<0) {printf("%i:%i: Ошибка: Найден закрывающий комментарий\n",i,j);exit(1);}
}
}
if (cnt!=0) {printf("%i:%i: Ошибка: Незакрытый комментарий\n",err_row, err_col);exit(1);}
cnt=0;
for (i=0; i<n_str; i++){
for (j=0; code[i][j]!=0; j++){
if (code[i][j]=='/'&&code[i][j+1]=='*'){
cnt=1;break;
}
if (code[i][j]=='*'&&code[i][j+1]=='/'){
Move_strings1(code,">>",i,0,1); code[i][0]=0;
cnt=0; break;
}
}
if (cnt!=0) {Move_strings1(code,">>",i,0,1); code[i][0]=0;}
}
for (i=0; i<n_str; i++){
for (j=0; j<80; j++){
if (code[i][j]=='/'&&code[i][j+1]=='/'){
if (j){
Move_strings1(code, ">>",i, j, 2); code[i][j]='\n'; code[i][j+1]=0;
}
else{
Move_strings1(code, ">>",i, j, 1);code[i][j]=0;
}
break;
}
}
}
}
int Text_search(char *tmp, char code[][80], int str){
int i=0, col=0, cnt=0;
for (col=0; code[str][col]!=0; col++){
if (code[str][col]==tmp[0]){
for (i=0; i<strlen(tmp); i++){
if ((code[str][col+i]==tmp[i])) cnt++;
}
if (cnt==strlen(tmp)) {return col;}
else cnt=0;
}
}
if (!cnt) {
return -1;
}
}
void Space_killer(char code[][80], int n_str){
int row=0, col=0;
bool s=0, s1=0;
for (row=0; row<n_str; row++){
for (col=0; code[row][col]!=0; col++){
if (code[row][col]=='"') s=1-s;
if (code[row][col]=='/'&&code[row][col+1]=='*') s1=1;
if (code[row][col]=='*'&&code[row][col+1]=='/') s1=0;
if (code[row][col]=='/'&&code[row][col+1]=='/') row++;
if (((code[row][col]==' ')||(code[row][col]=='\t'))&&(!s)&&(!s1)){
int j=0;
for (j=col; code[row][j]!=0; j++){
code[row][j]=code[row][j+1];
}
col--;
}
}
}
}
void Double_brackets(char code[][80], int n_str){
int row=0, col=0, cnt=0, cnt1=0, cnt2=0, cnt3=0;
for(row=0; row<n_str; row++){
for (col=0; col<80; col++){
if (code[row][col]=='(') cnt++;
if (code[row][col]=='[') cnt1++;
if (code[row][col]=='{') cnt2++;
if (code[row][col]==')') cnt--;
if (code[row][col]==']') cnt1--;
if (code[row][col]=='}') cnt2--;
if (code[row][col]=='"') cnt3++;
}
}
if (cnt){
cnt=0;
for(row=0; row<n_str; row++){
for (col=0; col<80; col++){
if (code[row][col]=='('){
if (!((code[row][col-1]=='\'')&&(code[row][col+1]=='\''))) cnt++;
}
if (code[row][col]==')'){
if (!((code[row][col-1]=='\'')&&(code[row][col+1]=='\''))) cnt--;
}
}
if (cnt>0){
printf("%i:%i: Ошибка: Неправильный символ ( \n", row, Text_search("(",code, row));
exit(1);
break;
}
if (cnt<0){
printf("%i:%i: Ошибка: Неправильный символ ) \n", row, Text_search(")",code, row));
exit(1);
break;
}
cnt=0;
}
}
if (cnt1){
cnt1=0;
for(row=0; row<n_str; row++){
for (col=0; col<80; col++){
if (code[row][col]=='[') cnt1++;
if (code[row][col]==']') cnt1--;
}
if (cnt1>0){
printf("%i:%i: Ошибка: Неправильный символ [ \n", row, Text_search("[",code, row));
exit(1);
break;
}
if (cnt1<0){
printf("%i:%i: Ошибка: Неправильный символ ] \n", row, Text_search("]",code, row));
exit(1);
break;
}
cnt1=0;
}
}
if (cnt2){
int sum=0;
cnt2=0;
for(row=0; row<n_str; row++){
if (Text_search("{",code, row)){
printf("%i:%i: Ошибка: Лишняя открывающая скобка\n", row, col);
exit(1);
break;
}
}
}
if (cnt3%2){
int i=0; cnt3=0;
for (row=0; row<n_str; row++){
for (i=0; i<80; i++) {if (code[row][i]=='"') cnt3++;}
if (cnt3%2) printf("%i: Ошибка: Не найден парный символ \" в этой строке\n",row);
exit(1);
cnt3=0;
}
}
}
void Indent(char code[][80], int n_str){
int i=0, j=0;
for (i=0; i<n_str; i++){
for (j=0; j<80; j++){
if (code[i][0]!=0){
if ((code[i][j]==';'||code[i][j]==':')&&code[i][j+1]!=0&&code[i][j+1]!='\n'){
Move_strings1(code,">>",i, j+1,1); code[i][j+1]='\n';
}
if (code[i][j]=='{'||code[i][j]=='}'){
if (j==0){
if (code[i][j+2]!=0){Move_strings1(code,">>",i, j+1,1);code[i][j+1]='\n';}
}
else{
if (code[i][j+1]!=0){
Move_strings1(code,">>",i,j,1);
code[i][j]='\n';
if (code[i][j+2]!=0){
if (code[i][j+2]!='\n'){
Move_strings1(code, ">>",i,j+2,1);
code[i][j+2]='\n';}
}
}
}
j+=2;
}
}
}
}
int t=0;
for (i=0; i<n_str; i++){
Move_strings1(code,">>",i,0,t);
for (j=0; code[i][j]!=0; j++){
if (code[i][j]=='{'){
t+=2;
}
if (code[i][j]=='}') t-=2;
}
for (j=0; j<80; j++) {
if (code[i][j]=='}') Move_strings1(code, "<<", i, 0, 2);
if (code[i][j]=='\n'&&code[i][j+1]!=0){
if (code[i][j+1]=='{') Move_strings1(code,">>",i,j+1,t-2);
else {
if (code[i][j+1]=='}') Move_strings1(code,">>",i,j+1,t);
else Move_strings1(code, ">>", i, j+1, t);
}
}
}
}
for (i=0; i<n_str; i++){
if (code[i][0]==0) Move_strings1(code,"<<",i,0,1);
for (j=0; j<80; j++){
if (code[i][j]==0&&code[i][j+1]=='/'&&code[i][j+2]=='/'){
int k=0,l=0,lock=0;
for (k=0; k<=j; k++) if (code[i][k]==0||code[i][k]=='\n') code[i][k]=' ';
Move_strings1(code,"<<",i,j-3,4);
}
}
}
}
int Library(char code[][80], int n_str){
int row=0, pos=0;;
for (row=0; row<n_str; row++){
int tmp=0, tmp1=0;
if (Text_search("<stdio.h>", code, row)>=0){
tmp=Text_search("<stdio.h>", code, row);
tmp1=Text_search("#include", code, row);
pos=row;
if ((tmp-tmp1)<0) printf("%i: Ошибка: Неправильная инициализация библиотеки\n",pos);
else pos=row;
}
}
if (pos) return pos;
else {printf("Ошибка: Библиотека не инициализирована\n"); return -1;}
}
void Save(char code[][80], int n_str, char *name){
FILE *F;
F=fopen(name, "w");
int i=0, j=0;
for (i=0; i<n_str; i++){
for (j=0; code[i][j]!=0; j++) putc(code[i][j], F);
}
fclose(F);
}
void Symbols(char code[][80], int n_str){
int i=0, j=0,t=0;
for (i=0; i<n_str; i++){
for (j=0; j<80; j++){
if (code[i][j]=='"') t=1-t;
if (code[i][0]!=0&&!t){
if (code[i][j]>=65 && code[i][j]<=90){
code[i][j]=code[i][j]+32;
}
if (!strchr("abcdefghijklmnopqrstuvwxyz=%;\"\"&<>:} \n{,.!+-*/\\) #(1234567890", code[i][j])){
printf("%i:%i: Ошибка: Не корректный символ \"%c\"\n",i, j, code[i][j]); exit(1);
}
}
}
}
}
struct{
char v_name;
bool type;
int init_pos_x;
int init_pos_y;
}var[4];
void Operators(char code[][80], int n_str){
int row=0, main=0, var_num=0;
//Анализатор функции main
{
bool lock=1;
for (row=0; row<n_str; row++){
if (Text_search("intmain()", code, row)==0&&lock){
main=row; lock=0; row++;
int tmp=Text_search("intmain()", code, row-1)+3;
Move_strings1(code, ">>", row-1, tmp, 1);
}
if (Text_search("intmain()", code, row)>=0&&!lock){
printf("%i: Ошибка: Неправильная инициализация функции main()\n",row);
}
}
if (!main) printf("Ошибка: Функция main() не инициализирована\n");
}
//Анализатор инициализации переменных
{
int i=0;
for (i=0; i<n_str; i++){
if (Text_search("int",code, i)>=0){
int tmp=Text_search("int",code,i);
if (code[i][tmp+4]!=';'&&i!=main){
if (code[i][tmp-1]!='r'){
printf("%i:%i: Ошибка: Неправильная инициализация переменной\n",i, tmp+3);
}
}
else{
if (i!=main){
tmp+=3;Move_strings1(code, ">>",i,tmp, 1); tmp++;
if (var_num<4){
var[var_num].v_name=code[i][tmp]; var[var_num].type=3;
var[var_num].init_pos_x=i; var[var_num].init_pos_y=tmp; var_num++;
}
}
}
}
if (Text_search("float",code, i)>=0){
int tmp=Text_search("float",code, i); tmp+=5;
Move_strings1(code, ">>",i, tmp,1); tmp++;
if (var_num<4){
var[var_num].v_name=code[i][tmp]; var[var_num].type=5;
var[var_num].init_pos_x=i; var[var_num].init_pos_y=tmp; var_num++;
}
}
}
}
//Анализатор функций ввода-вывода
{
int lib=Library(code, n_str);
for (row=0; row<n_str; row++){
if (Text_search("scanf", code, row)>=0){
int tmp=0;
if (row<lib) printf("%i: Ошибка: Библиотека не объявнена\n",row);
else{
tmp=Text_search("scanf", code, row);
tmp+=5;
if (code[row][tmp]!='(') printf("%i: %i: Ошибка: Пропущена открывающая скобка\n", row, tmp);
else tmp++;
if (code[row][tmp]=='"'&&code[row][tmp+3]=='"'){
bool flag=1, m=0, lock=0, type=0;
if (code[row][tmp+1]!='%') {printf("%i:%i: Ошибка: Ожидался символ %c после (\n",row, tmp+1, code[row][tmp+1]);flag=0;}
if (code[row][tmp+2]!='i'&&code[row][tmp+2]!='f'&&flag) {printf("%i:%i: Ошибка: Неизвестный тип данных\n",row, tmp+2);flag=0;}
if (code[row][tmp+4]!=','&&flag) {printf("%i:%i: Ошибка: Нет разделителя межлу типом и аргументом\n",row, tmp+4);flag=0;}
if (code[row][tmp+5]!='&'&&flag) {printf("%i:%i: Ошибка: Нет указателя на переменную\n",row, tmp+5);flag=0;}
if(flag){
if (code[row][tmp+2]=='i') type=3; if (code[row][tmp+2]=='f') type=5;
for (m=0; m<var_num; m++){
if ((code[row][tmp+6]==var[m].v_name)&&(type==var[m].type)) lock=1;
}
if (!lock) printf("%i:%i: Ошибка: Неправильные данные или не инициализированая переменная\n",row, tmp+6);
}
if (code[row][tmp+7]!=')'&&flag) {printf("%i:%i: Ошибка: Пропущена закрывающая скобка\n",row, tmp+7);flag=0;}
if (code[row][tmp+8]!=';'&&flag) printf("%i:%i: Ошибка: Одидался знак ;\n",row, tmp+8);
}
else printf("%i:%i: Ошибка: Нет типа данных для ввода\n",row, tmp);
}
}
if (Text_search("printf", code, row)>=0){
if (row<lib) printf("%i: Ошибка: Библиотека не объявнена\n",row);
else{
int tmp=0, m=0, lock=0, type=0;
tmp=Text_search("printf", code, row);
tmp+=6;
if (code[row][tmp]!='(') printf("%i: %i: Ошибка: Пропущена открывающая скобка\n", row, tmp);
if (code[row][tmp+1]=='"'&&code[row][tmp+4]=='"'){
bool flag=1;
if (code[row][tmp+2]!='%'&&flag) {printf("%i:%i: Ошибка: Ожидался символ %c после (\n",row, tmp+1, code[row][tmp+1]);flag=0;}
if (code[row][tmp+3]!='i'&&code[row][tmp+3]!='f'&&flag) {printf("%i:%i: Ошибка: Неизвестный тип данных\n",row, tmp+2);flag=0;}
if (code[row][tmp+5]!=','&&flag) {printf("%i:%i: Нет разделителя межлу типом и аргументом\n",row, tmp+4);flag=0;}
if(flag){
if (code[row][tmp+3]=='i') type=3; if (code[row][tmp+3]=='f') type=5;
for (m=0; m<var_num; m++){
if ((code[row][tmp+6]==var[m].v_name)&&(type==var[m].type)) lock=1;
}
if (!lock) printf("%i:%i: Ошибка: Неправильные данные или не инициализированая переменная\n",row, tmp+6);
}
if (code[row][tmp+7]!=')'&&flag) {printf("%i:%i: Ошибка: Пропущена открывающая скобка\n",row, tmp+7);flag=0;}
if (code[row][tmp+8]!=';'&&flag) printf("%i:%i: Ошибка: Ожидался символ ;\n",row, tmp+8);
}
else{
int t=0, i=0;
for (i=tmp+2; code[row][i]!=0; i++){
if (code[row][i]=='\"') {t=i; break;}
}
if (!t) printf("%i:%i: Ошибка: Ожидался символl \"\n",row,tmp+1);
else{
if (code[row][t+1]!=')') printf("%i:%i: Ошибка: Пропущена закрывающая скобка\n",row, t+1);
if (code[row][t+2]!=';') printf("%i:%i: Ошибка: Ожидался знак ;\n",row, t+2);
}
}
}
}
}
}
//Анализатор оператора goto
{
for (row=0; row<n_str; row++){
if (Text_search("goto", code, row)>=0){
int tmp=Text_search("goto", code, row)+5, i=0;
char label[9]={0};
Move_strings1(code, ">>", row, tmp-1, 1);
for (i=tmp; code[row][i]!=';'; i++) ;
if (i-tmp>=8) printf("%i: Ошибка: Слишком длинное имя метки или нету ; перед меткой\n",row);
else{
int j=0; bool lock=0;
for (j=tmp; j<i; j++) label[j-tmp]=code[row][j];
for (j=0; label[j]!=0; j++) ; label[j]=':';
for (j=0; j<n_str; j++){
int k=0;
for (k=0; k<80; k++){
int l=0, ct=0;
for (l=0; label[l]!=0; l++) if (label[l]==code[j][k+l]) ct++;
if (ct==strlen(label)){
lock=1;
if (j<main) printf("%i: Ошибка: Метка не может находиться за пределами функции main()\n",j);
}
}
}
if (!lock) printf("Ошибка: Меток не найдено\n");
}
}
}
}
//Анализатор оператора if
{
for (row=0; row<n_str; row++){
if (Text_search("if",code,row)>=0){
int tmp=Text_search("if",code,row)+2, t=0, i=0;
Move_strings1(code, ">>",row, tmp,1);tmp++;
if (code[row][tmp]=='(') t++;
else{printf("%i:%i: Ошибка: некорректный оператор if\n",row, tmp);}
for (i=tmp+1; t!=0; i++){
if (code[row][i]=='(') t++;
if (code[row][i]==')') t--;
if (!strchr("=%&<>.!+-*/)|(1234567890", code[row][i])){
int j=0, lock=0;
for (j=0; j<var_num; j++){
if (var[j].v_name==code[row][i]) lock=1;
}
if (!lock) printf("%i:%i: Ошибка: Неправильный символ или не инициализированая переменная\n",row, i);
}
}
int els=0;
for (i=0; i<row; i++){
if (Text_search("else",code,i)>=0) {els=i;break;}
}
if (els) printf("%i:%i: Ошибка: Else не может находится перед if\n",Text_search("else",code,els),els);
}
}
}
//Анализатор оператора switch
{
int sw=0;
for (row=0; row<n_str; row++){
if (Text_search("switch",code, row)>=0){
int tmp=Text_search("switch",code, row); tmp+=6;sw++;
Move_strings1(code, ">>",row,tmp, 1); tmp++;
if (!(code[row][tmp]=='('&&code[row][tmp+2]==')')){
printf("%i:%i: Ошибка: Неправильное размещение скобок\n",row,tmp);
}
else{
int i=0,lock=1, num=0;
for (i=0; i<var_num; i++){
if (code[row][tmp+1]==var[i].v_name) {lock=0;num=i;}
}
if (lock) printf("%i:%i: Ошибка: Не инициализированая переменная \'%c\'\n",row, tmp+1,code[row][tmp+1]);
else{
if(var[num].type==5) printf("%i:%i: Ошибка: Нельзя использовать отличные от \'int\' типы данных\n",row, tmp+1);
}
for (i=0; i<row; i++){
int tmp=Text_search("case",code,i);
if (tmp>=0) printf("%i:%i: Ошибка: Case не может находится перед switch\n",i, tmp);
}
int c=0;
for (i=row; i<n_str; i++){
int tmp=Text_search("case",code,i);
if (tmp>=0){
tmp+=4; Move_strings1(code, ">>",i, tmp, 1); tmp++; c++;
if (!(code[i][tmp]>=48&&code[i][tmp]<=57)){
printf("%i:%i: Ошибка: Только константы могут сочетаться с case\n",i, tmp);
}
if (code[i][tmp+1]!=':') printf("%i:%i: Ошибка: Нет \':\' после case\n",i, tmp);
}
}
if (!c) printf("Switch не может использоваться без case\n");
}
}
}
if (!sw){
for (row=0; row<n_str; row++){
int tmp=Text_search("case",code,row);
if (tmp>=0) printf("%i:%i: Ошибка: Case не может использоваться без switch\n",row,tmp);
}
}
}
//Анализатор арифметических выражений в коде
{
int i=0, j=0;
for (i=0; i<n_str; i++){
for (j=0; j<80; j++){
if ((code[i][j]=='+'||code[i][j]=='-'||code[i][j]=='*'||code[i][j]=='/'||code[i][j]=='=')&&(code[i][0]!=0)){
int k=0, m=0;
for (k=0; k<80; k++) if ((code[i][k]=='/')&&(code[i][k+1]=='/')) m++;
if (m!=1){
int t=0, l=0;
bool lock1=0, lock2=0;
for (l=0; l<var_num; l++){
if ((var[l].v_name==code[i][j-1])||(code[i][j-1]>=48&&code[i][j-1]<=57)) lock1=1;
if (var[l].v_name==code[i][j+1]||(code[i][j+1]>=48&&code[i][j+1]<=57)) lock2=1;
}
if (!lock1) printf("%i:%i: Ошибка: Символ слева от \'%c\' не является ни переменной ни константой\n",i, j-1, code[i][j]);
if (!lock2) printf("%i:%i: Ошибка: Символ справа от \'%c\' не является ни переменной ни константой\n",i, j+1, code[i][j]);
}
}
}
}
}
}
int main(){
char filename[255]={0};
printf("Введите имя файла для анализа\n");
system("dir");
FILE *F;
do{
gets(filename);
if ((F=fopen(filename,"r"))==NULL){
printf("Ошибка во время открытия файла\n");
}
break;
}while(1);
const int n_str=Number_of_strings(F)+2;
rewind(F);
char code[n_str][80], tmp;
int i=0, j=0, row=0, col=0;
for (i=0; i<n_str; i++){
for (j=0; j<80; code[i][j]=0, j++) ;
}
do{
tmp=getc(F);
code[row][col]=tmp;
if (tmp=='\n') { code[row][col]=tmp; row++; col=0;}
else{
code[row][col]=tmp;
if (code[row][col]==EOF) code[row][col]=0;
col++;
}
}while(tmp!=EOF);
fclose(F);
int p=0;
for (p=0; p<255;filename[p]=0, p++) ;
Comment_killer(code, n_str);
Symbols(code, n_str);
Double_brackets(code, n_str);
Space_killer(code, n_str);
Library(code, n_str);
Operators(code, n_str);
Indent(code, n_str);
printf("Введите имя файла, который в собираетесь сохранить\n");
gets(filename);
Save(code, n_str,filename);
}
Приложение В
Исходный код текста простой программы на языке С.
/*
This programm is demonstrating four
arithmetic operations
*/
#include <stdio.h>
int main(){
float a;
int b;
retry:
scanf("%f",&a);
scanf("%i",&b);
//scanf("%f",&c);
if (!(a&&b&&(b<4)))
{
printf("You entered wrong digits, try again\n");
goto retry;
}
else{
switch(b){
case 1:
a=a+b;
break;
case 2:
a=a-b;
break;
case 3:
a=a*b;
break;
case 4:
a=a/b;
break;
default:
printf("%f",a);
break;
}
printf("%f",a);
}
}
Размещено на Allbest.ru
Подобные документы
Разработка технологии обработки информации, структуры и формы представления данных. Проектирование программных модулей. Блок-схема алгоритма и исходный код программы анализа арифметического выражения, синтаксического анализа простой программы на языке С.
курсовая работа [2,4 M], добавлен 12.12.2011Разработка технического задания на проектирование, определение требований к программе. Предварительный выбор метода решения синтаксического анализатора, проектирование программного приложения, конфигурация технических средств программы и её тестирование.
курсовая работа [28,5 K], добавлен 28.06.2011Проектирование программы, реализующей синтаксический анализ простой программы на языке С: этапы создания, алгоритм ее функционирования, структура, технология обработки информации. Описание программных модулей, интерфейс; выбор инструментальных средств.
курсовая работа [1,6 M], добавлен 12.12.2011Синтаксический анализ простой программы на языке С. Предварительный выбор метода решения задачи. Разработка технологии обработки информации. Проектирование программных модулей. Процесс тестирования программы. Требования к программному обеспечению.
курсовая работа [934,7 K], добавлен 01.07.2011Рaзрaботка программного приложения (синтаксического aнaлизaторa), которое производит проверку синтaксисa простейшей программы на языке С++. Процедура проверки арифметических и логический выражений. Механизм удаления всех фиктивных переменных из программы.
курсовая работа [27,2 K], добавлен 28.06.2011Особенности разработки программы для ведения автоматизированной базы данных, организованной на информационных файлах. Тестовые наборы, проектирование кода программы. Принципы проведения испытаний и принципы проверки алгоритма на работоспособность.
лабораторная работа [1,6 M], добавлен 23.11.2014Проектирование программы-анализатора, состоящей из двух частей: лексического анализатора, разбивающего исходный текст программы на лексемы и заполняющего таблицу имен; синтаксического анализатора, проверяющего соответствие текста заданной грамматике.
курсовая работа [2,0 M], добавлен 14.06.2010Разработка программного приложения, производящего проверку синтаксиса простой программы: выбор метода создания синтаксического анализатора, описание требований к программному обеспечению, написание алгоритмов решения и тестирование конечного продукта.
курсовая работа [579,7 K], добавлен 03.07.2011Этапы разработки программного приложения, выполняющего синтаксический анализ программы на языке С и форматирование текста программы на языке С. Требования к программному обеспечению и интерфейсу. Конфигурация технических средств и оценка надежности.
курсовая работа [1,6 M], добавлен 22.06.2011Аспекты безопасности информации, предотвращение внедрения программных закладок. Проектирование и разработка программы шифрования данных по заданной таблице из 160 символов. Дешифровка и вывод результата приложения. Его программный код и тестирование.
курсовая работа [163,1 K], добавлен 05.05.2016