Конструирование модели лексического и синтаксического анализа

Проведение исследования лексем в языках программирования. Построение регулярной грамматики по конечному автомату. Характеристика логического и физического проектирования. Изучение связи между контекстно-свободными грамматиками и синтаксическим анализом.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 23.05.2021
Размер файла 2,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

this->dataGridViewTextBoxColumn6->Width = 40;

//

// constant1

//

this->constant1->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom));

this->constant1->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize;

this->constant1->Columns->AddRange(gcnew cli::array< System::Windows::Forms::DataGridViewColumn^>(3) {

this->dataGridViewTextBoxColumn7,

this->dataGridViewTextBoxColumn8, this->dataGridViewTextBoxColumn9

});

this->constant1->EnableHeadersVisualStyles = false;

this->constant1->Location = System::Drawing::Point(614, 316);

this->constant1->Name = L"constant1";

this->constant1->RightToLeft = System::Windows::Forms::RightToLeft::No;

this->constant1->RowHeadersVisible = false;

this->constant1->Size = System::Drawing::Size(113, 103);

this->constant1->TabIndex = 15;

this->constant1->CellContentClick += gcnew System::Windows::Forms::DataGridViewCellEventHandler(this, &MyForm::constant1_CellContentClick);

//

// dataGridViewTextBoxColumn7

//

this->dataGridViewTextBoxColumn7->HeaderText = L"60";

this->dataGridViewTextBoxColumn7->Name = L"dataGridViewTextBoxColumn7";

this->dataGridViewTextBoxColumn7->Width = 30;

//

// dataGridViewTextBoxColumn8

//

this->dataGridViewTextBoxColumn8->HeaderText = L"д/к";

this->dataGridViewTextBoxColumn8->Name = L"dataGridViewTextBoxColumn8";

this->dataGridViewTextBoxColumn8->Width = 40;

//

// dataGridViewTextBoxColumn9

//

this->dataGridViewTextBoxColumn9->HeaderText = L"п/к";

this->dataGridViewTextBoxColumn9->Name = L"dataGridViewTextBoxColumn9";

this->dataGridViewTextBoxColumn9->Width = 40;

//

// ident1

//

this->ident1->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom));

this->ident1->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize;

this->ident1->Columns->AddRange(gcnew cli::array< System::Windows::Forms::DataGridViewColumn^>(3) {

this->dataGridViewTextBoxColumn10,

this->dataGridViewTextBoxColumn11, this->dataGridViewTextBoxColumn12

});

this->ident1->EnableHeadersVisualStyles = false;

this->ident1->Location = System::Drawing::Point(371, 316);

this->ident1->Name = L"ident1";

this->ident1->RightToLeft = System::Windows::Forms::RightToLeft::No;

this->ident1->RowHeadersVisible = false;

this->ident1->Size = System::Drawing::Size(113, 103);

this->ident1->TabIndex = 16;

//

// dataGridViewTextBoxColumn10

//

this->dataGridViewTextBoxColumn10->HeaderText = L"40";

this->dataGridViewTextBoxColumn10->Name = L"dataGridViewTextBoxColumn10";

this->dataGridViewTextBoxColumn10->Width = 30;

//

// dataGridViewTextBoxColumn11

//

this->dataGridViewTextBoxColumn11->HeaderText = L"д/к";

this->dataGridViewTextBoxColumn11->Name = L"dataGridViewTextBoxColumn11";

this->dataGridViewTextBoxColumn11->Width = 40;

//

// dataGridViewTextBoxColumn12

//

this->dataGridViewTextBoxColumn12->HeaderText = L"п/к";

this->dataGridViewTextBoxColumn12->Name = L"dataGridViewTextBoxColumn12";

this->dataGridViewTextBoxColumn12->Width = 40;

//

// label4

//

this->label4->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom));

this->label4->AutoSize = true;

this->label4->Location = System::Drawing::Point(371, 300);

this->label4->Name = L"label4";

this->label4->Size = System::Drawing::Size(62, 13);

this->label4->TabIndex = 17;

this->label4->Text = L"идентифик";

//

// label5

//

this->label5->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom));

this->label5->AutoSize = true;

this->label5->Location = System::Drawing::Point(611, 300);

this->label5->Name = L"label5";

this->label5->Size = System::Drawing::Size(33, 13);

this->label5->TabIndex = 18;

this->label5->Text = L"const";

//

// label6

//

this->label6->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom));

this->label6->AutoSize = true;

this->label6->Location = System::Drawing::Point(490, 300);

this->label6->Name = L"label6";

this->label6->Size = System::Drawing::Size(64, 13);

this->label6->TabIndex = 19;

this->label6->Text = L"пунктуация";

//

// punctuation1

//

this->punctuation1->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom));

this->punctuation1->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize;

this->punctuation1->Columns->AddRange(gcnew cli::array< System::Windows::Forms::DataGridViewColumn^>(3) {

this->dataGridViewTextBoxColumn13,

this->dataGridViewTextBoxColumn14, this->dataGridViewTextBoxColumn15

});

this->punctuation1->EnableHeadersVisualStyles = false;

this->punctuation1->Location = System::Drawing::Point(490, 316);

this->punctuation1->Name = L"punctuation1";

this->punctuation1->RightToLeft = System::Windows::Forms::RightToLeft::No;

this->punctuation1->RowHeadersVisible = false;

this->punctuation1->Size = System::Drawing::Size(113, 103);

this->punctuation1->TabIndex = 20;

//

// dataGridViewTextBoxColumn13

//

this->dataGridViewTextBoxColumn13->HeaderText = L"50";

this->dataGridViewTextBoxColumn13->Name = L"dataGridViewTextBoxColumn13";

this->dataGridViewTextBoxColumn13->Width = 30;

//

// dataGridViewTextBoxColumn14

//

this->dataGridViewTextBoxColumn14->HeaderText = L"д/к";

this->dataGridViewTextBoxColumn14->Name = L"dataGridViewTextBoxColumn14";

this->dataGridViewTextBoxColumn14->Width = 40;

//

// dataGridViewTextBoxColumn15

//

this->dataGridViewTextBoxColumn15->HeaderText = L"п/к";

this->dataGridViewTextBoxColumn15->Name = L"dataGridViewTextBoxColumn15";

this->dataGridViewTextBoxColumn15->Width = 40;

//

// richTextBox3

//

this->richTextBox3->Anchor = System::Windows::Forms::AnchorStyles::Top;

this->richTextBox3->Location = System::Drawing::Point(415, 12);

this->richTextBox3->Name = L"richTextBox3";

this->richTextBox3->Size = System::Drawing::Size(312, 139);

this->richTextBox3->TabIndex = 21;

this->richTextBox3->Text = L"";

//

// richTextBox4

//

this->richTextBox4->Anchor = System::Windows::Forms::AnchorStyles::Top;

this->richTextBox4->Location = System::Drawing::Point(415, 157);

this->richTextBox4->Name = L"richTextBox4";

this->richTextBox4->Size = System::Drawing::Size(312, 139);

this->richTextBox4->TabIndex = 22;

this->richTextBox4->Text = L"";

//

// label7

//

this->label7->Anchor = System::Windows::Forms::AnchorStyles::Top;

this->label7->AutoSize = true;

this->label7->Location = System::Drawing::Point(330, 62);

this->label7->Name = L"label7";

this->label7->Size = System::Drawing::Size(65, 26);

this->label7->TabIndex = 23;

this->label7->Text = L"количество\r\nстрок:";

//

// textBox1

//

this->textBox1->Anchor = System::Windows::Forms::AnchorStyles::Top;

this->textBox1->BorderStyle = System::Windows::Forms::BorderStyle::None;

this->textBox1->Location = System::Drawing::Point(370, 75);

this->textBox1->Name = L"textBox1";

this->textBox1->Size = System::Drawing::Size(24, 13);

this->textBox1->TabIndex = 26;

this->textBox1->TextChanged += gcnew System::EventHandler(this, &MyForm::textBox1_TextChanged_1);

//

// button2

//

this->button2->Anchor = System::Windows::Forms::AnchorStyles::Top;

this->button2->Location = System::Drawing::Point(330, 94);

this->button2->Name = L"button2";

this->button2->Size = System::Drawing::Size(75, 47);

this->button2->TabIndex = 27;

this->button2->Text = L"error processing";

this->button2->UseVisualStyleBackColor = true;

this->button2->Click += gcnew System::EventHandler(this, &MyForm::button2_Click);

//

// button3

//

this->button3->Location = System::Drawing::Point(333, 273);

this->button3->Name = L"button3";

this->button3->Size = System::Drawing::Size(75, 23);

this->button3->TabIndex = 28;

this->button3->Text = L"clear";

this->button3->UseVisualStyleBackColor = true;

this->button3->Click += gcnew System::EventHandler(this, &MyForm::button3_Click);

//

// MyForm

//

this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Inherit;

this->ClientSize = System::Drawing::Size(739, 430);

this->Controls->Add(this->button3);

this->Controls->Add(this->button2);

this->Controls->Add(this->textBox1);

this->Controls->Add(this->label7);

this->Controls->Add(this->richTextBox4);

this->Controls->Add(this->richTextBox3);

this->Controls->Add(this->punctuation1);

this->Controls->Add(this->label6);

this->Controls->Add(this->label5);

this->Controls->Add(this->label4);

this->Controls->Add(this->ident1);

this->Controls->Add(this->constant1);

this->Controls->Add(this->ops1);

this->Controls->Add(this->op1);

this->Controls->Add(this->label3);

this->Controls->Add(this->label2);

this->Controls->Add(this->label1);

this->Controls->Add(this->keyWord1);

this->Controls->Add(this->richTextBox2);

this->Controls->Add(this->button1);

this->Controls->Add(this->richTextBox1);

this->Name = L"MyForm";

this->Text = L"MyForm";

this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load);

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->keyWord1))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->op1))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->ops1))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->constant1))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->ident1))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->punctuation1))->EndInit();

this->ResumeLayout(false);

this->PerformLayout();

}

#pragma endregion

String^ code;

String^ code1;

String^ code2;

bool err;

int lastRow;

bool nlol;

private: void keyWord(int i,int pr) {

if (!err) {

//для возврата к символу-разделителю

String^ tmp = code->Substring(pr, i - pr);

nlol = true;

int j = 0;

//проверка на повторяемость

for (; j < keyWord1->RowCount - 1; j++)

if (keyWord1[1, j]->Value->ToString() == tmp) {

nlol = false;

break;

}

if (nlol) {

keyWord1->Rows->Add();

lastRow = keyWord1->RowCount - 2;

keyWord1->Rows[lastRow]->Cells[0]->Value = keyWord1->RowCount - 1;

keyWord1->Rows[lastRow]->Cells[1]->Value = tmp;

keyWord1->Rows[lastRow]->Cells[2]->Value = tmp;

}

richTextBox3->Text += "(10," + (j + 1).ToString() + ") ";

if (code->Substring(i, 1) == " ")

tmp += " ";

richTextBox4->Text += tmp;

}

}

private: void o_peratr(int i, int pr) {

if (!err) {

//для возврата к символу-разделителю

String^ tmp = code->Substring(pr, i - pr);

nlol = true;

//проверка на повторяемость

int j = 0;

for (; j < op1->RowCount - 1; j++)

if (op1[1, j]->Value->ToString() == tmp) {

nlol = false;

break;

}

if (nlol) {

op1->Rows->Add();

lastRow = op1->RowCount - 2;

op1->Rows[lastRow]->Cells[0]->Value = op1->RowCount - 1;

op1->Rows[lastRow]->Cells[1]->Value = tmp;

op1->Rows[lastRow]->Cells[2]->Value = tmp;

}

richTextBox3->Text += "(20," + (j + 1).ToString() + ")";

richTextBox4->Text += tmp;

}

}

private: void o_peratr_sravn(int i, int pr) {

if (!err) {

//для возврата к символу-разделителю

String^ tmp = code->Substring(pr, i - pr);

nlol = true;

//проверка на повторяемость

int j = 0;

for (; j < ops1->RowCount - 1; j++)

if (ops1[1, j]->Value->ToString() == tmp) {

nlol = false;

break;

}

if (nlol) {

ops1->Rows->Add();

lastRow = ops1->RowCount - 2;

ops1->Rows[lastRow]->Cells[0]->Value = ops1->RowCount - 1;

ops1->Rows[lastRow]->Cells[1]->Value = tmp;

ops1->Rows[lastRow]->Cells[2]->Value = tmp;

}

richTextBox3->Text += "(30," + (j + 1).ToString() + ") ";

richTextBox4->Text += tmp;

}

}

private: void ident(int i, int pr) {

if (!err) {

String^ tmp = code->Substring(pr, i - pr);

nlol = true;

//проверка на повторяемость

int j = 0;

for (; j < ident1->RowCount - 1; j++)

if (ident1[1, j]->Value->ToString() == tmp) {

nlol = false;

break;

}

if (nlol) {

ident1->Rows->Add();

lastRow = ident1->RowCount - 2;

ident1->Rows[lastRow]->Cells[0]->Value = ident1->RowCount - 1;

ident1->Rows[lastRow]->Cells[1]->Value = tmp;

ident1->Rows[lastRow]->Cells[2]->Value = "id";

}

richTextBox3->Text += "(40," + (j + 1).ToString() + ") ";

richTextBox4->Text += "id";

if (code->Substring(i, 1) == " ")

richTextBox4->Text += " ";

}

}

//сиволы пунктуации

private: void punctuation(int i) {

//взять символ

if (!err) {

String^ tmp = code->Substring(i, 1);

//проверка на повторяемость

nlol = true;

int j = 0;

for (; j < punctuation1->RowCount - 1; j++)

if (punctuation1[1, j]->Value->ToString() == tmp) {

nlol = false;

break;

}

if (nlol) {

punctuation1->Rows->Add();

lastRow = punctuation1->RowCount - 2;

punctuation1->Rows[lastRow]->Cells[0]->Value = punctuation1->RowCount - 1;

punctuation1->Rows[lastRow]->Cells[1]->Value = tmp;

punctuation1->Rows[lastRow]->Cells[2]->Value = tmp;

}

richTextBox3->Text += "(50," + (j + 1).ToString() + ") ";

richTextBox4->Text += tmp;

}

}

private:void constant(int i, int pr) {

if (!err) {

//для возврата к символу-разделителю

String^ tmp = code->Substring(pr, i - pr);

nlol = true;

//проверка на повторяемость

int j = 0;

for (; j < constant1->RowCount - 1; j++)

if (constant1[1, j]->Value->ToString() == tmp) {

nlol = false;

break;

}

if (nlol) {

constant1->Rows->Add();

lastRow = constant1->RowCount - 2;

constant1->Rows[lastRow]->Cells[0]->Value = constant1->RowCount - 1;

constant1->Rows[lastRow]->Cells[1]->Value = tmp;

constant1->Rows[lastRow]->Cells[2]->Value = "const";

}

richTextBox3->Text += "(60," + (j + 1).ToString() + ") ";

richTextBox4->Text += "const";

}

}

private: int rand_S(int i) {

if (word(code[i]) || digit(code[i])) {

return 200;//цифры и буквы

}

else if (o_perat(code[i]) != 0) {

return 305; //операторы

}

else {

return 401;//пунктуация

}

}

//удаление лишних пробелов, переходов на новую строку, коментариевж

private: void delet_problem() {

richTextBox3->Text = "Дискрипторный код:\n";

richTextBox4->Text = "Псевдо код\n";

richTextBox2->Text = "";

bool cet=false;

code2 = "1";

int i =2,i1=10;

bool ret = false;

code1 = "";

for (int y = 0; y <= code->Length - 1; y++) {

if (code[y] == '/') {

if (code[y + 1] == '/') {

while (code[y] != '\n')

y++;

y++;

}

else if (code[y + 1] == '*') {

while (!(code[y] == '*' && code[y + 1] == '/'))

y++;

y += 2;

}

}

if (ret)

while (code[y] == 9 || code[y] == '\n') {

y++;

}

if(cet)

while (code[y] == 9 || code[y] == 32) {

y++;

}

ret = false;

cet = false;

if (code[y] == '\n')

ret = true;

if (code[y] == 32)

cet = true;

if (code[y] != 9)

{

code1 += code[y];

code2 += code[y];

if (code[y] == '\n') {

if (i < 10)

code2 += "";

if (i < 100)

code2 += " ";

if (i < 1000)

code2 += "";

code2 += i+ "";

i++;

}

}

}

code = code1;

}

private: void programm() {

code = richTextBox1->Text;

delet_problem();

int S = 0, i = 0, pr = 0, stroka = 1, pir;

String^ error;

error = "";

int df = code->Length;

while (i < code->Length ) {

if (i - pr == 32) {

if (err) {

error += "строка-" + stroka + ":" + code->Substring(pr, i - pr) + "\n//переполнение символов в идентификаторе\n\n";

}

else {

String^ esd = "4" + stroka.ToString() + code->Substring(pr, i - pr);

throwesd;

}

}

switch (S) {

//старт

case 0:

if (code[i] == 'c') S = 3;

else if (code[i] == 'b') S = 6;

else if (code[i] == 'e') S = 11;

else if (code[i] == 'i') S = 16;

else if (code[i] == 'f') S = 18;

else if (code[i] == 's') S = 22;

else if (code[i] == 'v') S = 31;

else if (code[i] == 'm') S = 41;

else if (code[i] == 'n') S = 47;

else if (code[i] == 'd') S = 56;

else if (code[i] == 'r') S = 61;

else if (word( code[i])){ S = 200; pr = i; }

else if (digit(code[i])) {

S = 100;

pr = i;

}

else if (punctz(code[i])) { S = 400; }

else if (o_perat(code[i]) != 0) {

S = 300;

}

else if (code[i] == '/') {

o_peratr(i + 1, i);

}

else if (code[i] == '%') {

S = 0;

}

else if (code[i] == '#'|| code[i] == ' ') {

S = 0;

}

else if (code[i] == '\n') {

stroka++;

S = 0;

}

else {

if (err) {

error += "строка-" + stroka + ":" + code->Substring(i, 1) + "\n//неопознанный символ\n\n";

S = 0;

}

else {

String^ esd = "1" + stroka.ToString() + code->Substring(i, 1);

throwesd;

}

}

//пунктуация

break;

case 400:

i--;

punctuation(i);

S = 0;

break;

//проверка ключевых слов

case 1:

if (word(code[i]) || digit(code[i])) {

S = 200;

}

else if (!word(code[i]) && !digit(code[i])) {

keyWord(i, pr);

S = 0;

i--;

}

else if (o_perat(code[i]) != 0) { S = 0; i--; }

break;

//идентификаторы

case 2:

if (word(code[i]) || digit(code[i]))

{

S = 2;

}

else {

ident(i, pr);

i--;

S = 0;

}

break;

case 200:

if (word(code[i]) || digit(code[i]))

{

S = 200;

}

else {

ident(i, pr);

i--;

S = 0;

}

break;

//операторы

case 300:

i--;

pir = 0;

pr = i;

pir = o_perat(code[i]);

if (o_perat(code[i+1]) == 0) {

pir = o_perat1(pir);

if (pir == 1) {

S = 0;

o_peratr(i + 1, i);// /+,-,=,*,&,/

}

if (pir == 2) {

S = 0;

o_peratr_sravn(i + 1, i);// /<,>,!

}

}

else {

S = 301;

}

break;

case 301:

if (o_perat(code[i+1]) == 0) {

pir *= 10;

pir += o_perat(code[i]);

pir = o_perat1(pir);

if (pir == 0)

{

if (err) {

int c = i + 1;

while (o_perat(code[c]) != 0) {

c++;

}

error += "строка-" + stroka + ":" + code->Substring(pr, i-pr+1) + "\n//ошибка чтения оператора\n\n";

S = 200;

i = c;

}

else {

String^ asd = "3" + stroka + " " + code->Substring(pr,i-pr + 1);

throw asd;

}

}

if (pir == 1) {

o_peratr(i + 1, i-1);//305/++,--,+=,-=,*=

S = 0;

}

if (pir == 2) {

o_peratr_sravn(i + 1, i-1);//306 <=,>=,==,!=,||,&&

S = 0;

}

}

else {

S = 302;

}

break;

case 302:

if (o_perat(code[i]) != 0) {

S = 302;

}

else {

if (err) {

error += "строка-" + stroka + ":" + code->Substring(pr, i - pr) + "\n//ошибка чтения оператора\n\n";

S = 200;

}

else {

String^ asd = "3" + stroka + " " + code->Substring(pr, i - pr);

throw asd;

}

}

break;

case 305:

i--;

ident(i, pr);

S = 300;

break;

case 401:

i--;

ident(i, pr);

S = 400;

break;

//(c)char//cout/cin/case

case 3:

pr = i - 1;

if (code[i] == 'h') { S = 4; }

else if (code[i] == 'o') { S = 34; }

else if (code[i] == 'i') { S = 43; }

else if (code[i] == 'a') { S = 69; }

else { S = rand_S(i); }

break;

case 4:

if (code[i] == 'a') { S = 5; }

else { S = rand_S(i); }

break;

case 5:

if (code[i] == 'r') { S = 1; }

else { S = rand_S(i); }

break;

//(b)bool/break

case 6:

pr = i - 1;

if (code[i] == 'o' && code[i + 1] == 'o') { i++; S = 7; }

else if (code[i] == 'r') { S = 8; }

else { S = rand_S(i); }

break;

case 7:

if (code[i] == 'l') { S = 1; }

else { S = rand_S(i); }

break;

//break

case 8:

if (code[i] == 'e') { S = 9; }

else { S = rand_S(i); }

break;

case 9:

if (code[i] == 'a') { S = 10; }

else { S = rand_S(i); }

break;

case 10:

if (code[i] == 'k') { S = 1; }

else { S = rand_S(i); }

break;

//(e)endl,else

case 11:

pr = i - 1;

if (code[i] == 'n') { S = 12; }

else if (code[i] == 'l') { S = 14; }

else { S = rand_S(i); }

break;

case 12:

if (code[i] == 'd') { S = 7; }

else { S = rand_S(i); }

break;

//else

case 14:

if (code[i] == 's') { S = 15; }

else { S = rand_S(i); }

break;

case 15:

if (code[i] == 'e') { S = 1; }

else { S = rand_S(i); }

break;

//(i)int/include

case 16:

pr = i - 1;

if (code[i] == 'n') { S = 17; }

else { S = rand_S(i); }

break;

//include

case 17:

if (code[i] == 't') { S = 1; }

else if (code[i] == 'c') { S = 27; }

else { S = rand_S(i); }

break;

//float/for

case 18:

pr = i - 1;

if (code[i] == 'l') { S = 19; }

else if (code[i] == 'o') { S = 40; }

else { S = rand_S(i); }

break;

case 19:

if (code[i] == 'o') { S = 20; }

else { S = rand_S(i); }

break;

case 20:

if (code[i] == 'a') { S = 21; }

else { S = rand_S(i); }

break;

case 21:

if (code[i] == 't') { S = 1; }

else { S = rand_S(i); }

break;

//(s)string/system/switch

case 22:

pr = i - 1;

if (code[i] == 't') { S = 23; }

else if (code[i] == 'y') { S = 36; }

else if (code[i] == 'w') { S = 64; }

else { S = rand_S(i); }

break;

case 23:

if (code[i] == 'r') { S = 24; }

else { S = rand_S(i); }

break;

case 24:

if (code[i] == 'i') { S = 25; }

else { S = rand_S(i); }

break;

case 25:

if (code[i] == 'n') { S = 26; }

else { S = rand_S(i); }

break;

case 26:

if (code[i] == 'g') { S = 1; }

else { S = rand_S(i); }

break;

//include

case 27:

if (code[i] == 'l' ) {S = 28; }

else { S = rand_S(i); }

break;

case 28:

if ( code[i ] == 'u' ) { S = 29; }

else { S = rand_S(i); }

break;

case 29:

if ( code[i ] == 'd' ) {S = 30; }

else { S = rand_S(i); }

break;

case 30:

if (code[i ] == 'e') { S = 1; }

else { S = rand_S(i); }

break;

//void

case 31:

pr = i - 1;

if (code[i] == 'o' ) {S = 32; }

else { S = rand_S(i); }

break;

case 32:

if ( code[i] == 'i' ) {S = 33; }

else { S = rand_S(i); }

break;

case 33:

if ( code[i] == 'd') {S = 1; }

else { S = rand_S(i); }

break;

//cout

case 34:

if (code[i] == 'u') { S = 35; }

else { S = rand_S(i); }

break;

case 35:

if ( code[i ] == 't') {S = 1; }

else { S = rand_S(i); }

break;

//system

case 36:

if (code[i] == 's') {S = 37; }

else { S = rand_S(i); }

break;

case 37:

if ( code[i] == 't' ) {S =38; }

else { S = rand_S(i); }

break;

case 38:

if (code[i] == 'e' ) {S = 39; }

else { S = rand_S(i); }

break;

case 39:

if (code[i] == 'm') {S = 1; }

else { S = rand_S(i); }

break;

case 40:

if (code[i] == 'r') { S = 1; }

else { S = rand_S(i); }

break;

//main

case 41:

pr = i - 1;

if (code[i] == 'a') { S = 42; }

else { S = rand_S(i); }

break;

case 42:

if (code[i] == 'i') { S = 43; }

else { S = rand_S(i); }

break;

case 43:

if (code[i] == 'n') { S = 1; }

else { S = rand_S(i); }

break;

//new,namespace

case 47:

pr = i - 1;

if (code[i] == 'e') {S = 48; }

else if (code[i] == 'a') { S = 49; }

else { S = rand_S(i); }

break;

case 48:

if (code[i] == 'w') { S = 1; }

else { S = rand_S(i); }

break;

case 49:

if (code[i] == 'm') { S = 50; }

else { S = rand_S(i); }

break;

case 50:

if (code[i] == 'e') { S = 51; }

else { S = rand_S(i); }

break;

case 51:

if (code[i] == 's') { S = 52; }

else { S = rand_S(i); }

break;

case 52:

if (code[i] == 'p') { S = 53; }

else { S = rand_S(i); }

break;

case 53:

if (code[i] == 'a') { S = 54; }

else { S = rand_S(i); }

break;

case 54:

if (code[i] == 'c') { S = 55; }

else { S = rand_S(i); }

break;

case 55:

if (code[i] == 'e') { S = 1; }

else { S = rand_S(i); }

break;

//double

case 56:

pr = i - 1;

if (code[i] == 'o') { S = 57; }

else { S = rand_S(i); }

break;

case 57:

if (code[i] == 'u') { S = 58; }

else { S = rand_S(i); }

break;

case 58:

if (code[i] == 'b') { S = 59; }

else { S = rand_S(i); }

break;

case 59:

if (code[i] == 'l') { S = 60; }

else { S = rand_S(i); }

break;

case 60:

if (code[i] == 'e') { S = 1; }

else { S = rand_S(i); }

break;

//rand

case 61:

pr = i - 1;

if (code[i] == 'a') { S = 62; }

else { S = rand_S(i); }

break;

case 62:

if (code[i] == 'n') { S = 63; }

else { S = rand_S(i); }

break;

case 63:

if (code[i] == 'd') { S = 1; }

else { S = rand_S(i); }

break;

//switch

case 64:

if (code[i] == 'w') { S = 65; }

else { S = rand_S(i); }

break;

case 65:

if (code[i] == 'i') { S = 66; }

else { S = rand_S(i); }

break;

case 66:

if (code[i] == 't') { S = 67; }

else { S = rand_S(i); }

break;

case 67:

if (code[i] == 'c') { S = 68; }

else { S = rand_S(i); }

break;

case 68:

if (code[i] == 'h') { S = 1; }

else { S = rand_S(i); }

break;

//case

case 69:

if (code[i] == 'a') { S = 70; }

else { S = rand_S(i); }

break;

case 70:

if (code[i] == 's') { S = 71; }

else { S = rand_S(i); }

break;

case 71:

if (code[i] == 'e') { S = 1; }

else { S = rand_S(i); }

break;

//константы

case 100:

if (digit(code[i])) { S = 100; }

else if (punctz(code[i]) || code[i] == ' ') {

constant(i,pr); S = 0;

}

else if (code[i] == '.')

{ S = 101; }

else if (!digit(code[i]) && !punctz(code[i])) {

while (word(code[i])&& i-pr<=32)

i++;

if (err) {

while (word(code[i]) || digit(code[i]))

{

i++;

}

error += "строка-" + stroka + ": " + code->Substring(pr, i - pr) + "\n//ошибка чтения константы\n\n";

i--;

S = 0;

}

else {

String^ asd = "2" + stroka + " " + code->Substring(pr, i - pr);

throw asd;

}

}

break;

case 101:

if (!digit(code[i]) && !punctz(code[i]) && code[i] != ' ') { //danger

if (err) {

while (!punctz(code[i]) && code[i] != ' ' && code[i] != '\n')

{

i++;

}

error += "строка-" + stroka + ": " + code->Substring(pr, i - pr) + "\n//ошибка чтения константы\n\n";

i--;

S = 0;

}

else {

String^ asd = "2" + stroka + " " + code->Substring(pr, i - pr);

throw asd;

}

}

else if (digit(code[i])) {

S = 101;

}

else if (punctz(code[i]) || code[i] == ' '|| code[i] == '\n') {

constant(i, pr); S = 0;

}

break;

}

i++;

}

if (error!="")

richTextBox4->Text = error;

textBox1->Text = stroka.ToString();

}

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

System::Windows::Forms::DialogResult result;

err = false;

/*result=MessageBox::Show(this, "puskai budet rad", "ошибка",

System::Windows::Forms::MessageBoxButtons::YesNo);

if (result == System::Windows::Forms::DialogResult::No) {

richTextBox3->Text = "niiiit";

}*/

try {

programm();

richTextBox2->Text = code2;

}

catch (String ^ ex) {

char ef = ex[0];

int i = 1,prov = 0,pr=i;

while (digit(ex[i]))

{

i++;

}

String^ st = ex->Substring(1, i - pr);

ex = ex->Substring(i, ex->Length - i);

for (int i = 0; i < code->Length; i++) {

if (code2[i] == '\n')

prov++;

if (prov.ToString() == st)

break;

richTextBox2->Text += code2[i];

}

switch (ef) {

case '1':

MessageBox::Show(st + "-строка\n" + "неопознанный символ: " + ex, "ошибка");

break;

case '2':

MessageBox::Show(st + "-строка\n" + "ошибка чтения константы: " + ex, "ошибка");

break;

case '3':

MessageBox::Show(st + "-строка\n" + "ошибка чтения оператора: " + ex, "ошибка");

break;

case '4':

MessageBox::Show(st + "-строка\n" + "переполнение символов в идентификаторе: " + ex, "ошибка");

break;

}

}

catch (...)

{

richTextBox1->Text = "неопознанная ошибка";

}

}

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {

err = true;

programm();

richTextBox2->Text = code2;

}

private: System::Void richTextBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) {

}

private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {

setlocale(LC_ALL, "rus");

}

private: System::Void keyWord1_CellContentClick(System::Object^ sender, System::Windows::Forms::DataGridViewCellEventArgs^ e) {

}

private: System::Void constant1_CellContentClick(System::Object^ sender, System::Windows::Forms::DataGridViewCellEventArgs^ e) {

}

private: System::Void richTextBox2_TextChanged(System::Object^ sender, System::EventArgs^ e) {

}

private: System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) {

}

private: System::Void textBox1_TextChanged_1(System::Object^ sender, System::EventArgs^ e) {

}

private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {

//

ident1->Rows->Clear();

//

keyWord1->Rows->Clear();

//

op1->Rows->Clear();

//

ops1->Rows->Clear();

//

punctuation1->Rows->Clear();

//

constant1->Rows->Clear();

richTextBox2->Text = "";

richTextBox3->Text = "";

richTextBox4->Text = "";

textBox1->Text = "";

}

};

}

Размещено на Allbest.ru


Подобные документы

  • Разработка учебного транслятора на языке программирования C# в среде объектно-ориентированного программирования Visual Studio 2012. Выделение лексем и построение цепочки символов на этапе синтаксического анализа. Функциональное тестирование программы.

    курсовая работа [406,8 K], добавлен 07.08.2013

  • Содержательная часть языка программирования С++. Правила автоматной грамматики, классификация Хомского. Принцип построения графов, разработка проекта средствами среды программирования Builder C++. Алгоритм синтаксического анализа оператора вывода.

    контрольная работа [228,4 K], добавлен 22.05.2012

  • Описание синтаксиса и семантики входного языка. Описание типов лексем, определение их синтаксиса. Построение диаграммы лексического анализатора, а также его таблицы, тестирование. Построение КС-грамматики входного языка. Описание промежуточного языка.

    курсовая работа [83,0 K], добавлен 23.01.2014

  • Написание программы, которая выполняет лексический и синтаксический анализ входного языка программирования, порождает таблицу лексем с указанием их типов и значений, а также строит синтаксическое дерево; текст входного языка вводится с клавиатуры.

    курсовая работа [761,5 K], добавлен 23.02.2012

  • Понятие синтаксического анализа. Программный продукт для обработки данных строкового типа. Построение сканера текстов с использованием утилиты flex, синтаксического анализатора с помощью утилиты bison. Грамматика языка программирования обработки строк.

    курсовая работа [261,7 K], добавлен 29.10.2012

  • Морфологические анализаторы (морфологизаторы) на различных языках программирования. Анализ методов и технологий автоматической обработки ЕЯ-текстов. Разработка модуля графематического анализа и создания таблицы лексем. Программная реализация классов.

    дипломная работа [3,0 M], добавлен 06.03.2012

  • Общая характеристика и оценка возможностей языка программирования си-шарп, его сходные и отличительные черты от С++ и Java. Разработка с помощью данного языка программирования лексического и синтаксического анализатора. Составление таблиц разбора.

    курсовая работа [111,6 K], добавлен 11.06.2010

  • Входная грамматика в структурированной форме. Функции переходов символьного преобразователя. Работа лексического анализатора. Структуры данных, символы действия. Описание семантики перевода. Построение и программная реализация атрибутного преобразователя.

    курсовая работа [128,9 K], добавлен 03.07.2013

  • Розробка операційного автомату. Розробка машинного алгоритму: граф-схема алгоритму; приклад реалізації. Синтез керуючого автомату: основи теорії керуючих автоматів; опис керуючого автомату Мілі. Кодування граф-схеми автомату. Синтез керуючого автомату.

    курсовая работа [121,0 K], добавлен 26.12.2009

  • Описание проектного решения стратегической системы, этапы объектно-ориентированного анализа и проектирования. Описание связей между объектами. Программная реализация, построение модели состояний объекта. Руководство пользователя и описание программы.

    курсовая работа [388,8 K], добавлен 17.11.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.