//--------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//--------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
StringGrid1->Cells[0][0] = "Номер";
StringGrid1->Cells[1][0] = "Элемент";
StringGrid2->Cells[0][0] = "Номер";
StringGrid2->Cells[1][0] = "Элемент";
StringGrid3->Cells[0][0] = "Номер";
StringGrid3->Cells[1][0] = "Элемент";
}
// Открыть таблицу "ключевых слов"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (OpenDialog1->Execute())
{
TStringList *slist = new TStringList();
int j = 0;
slist->LoadFromFile(OpenDialog1->FileName);
for (int i = 1; i <= slist->Count; i++)
{
StringGrid1->Cells[0] = i;
StringGrid1->Cells[1] = slist->Strings[j];
j++;
}
delete slist;
}
}
//--------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
if (OpenDialog2->Execute())
{
TStringList *slist = new TStringList();
int j = 0;
slist->LoadFromFile(OpenDialog2->FileName);
for (int i = 1; i <= slist->Count; i++)
{
StringGrid2->Cells[0] = i;
StringGrid2->Cells[1] = slist->Strings[j];
j++;
}
delete slist;
}
}
//--------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (OpenDialog3->Execute())
Memo1->Lines->LoadFromFile(OpenDialog3->FileName);
}
//--------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
if (OpenDialog4->Execute())
{
TStringList *slist = new TStringList();
int j = 0;
slist->LoadFromFile(OpenDialog4->FileName);
for (int i = 1; i <= slist->Count; i++)
{
StringGrid3->Cells[0] = i;
StringGrid3->Cells[1] = slist->Strings[j];
j++;
}
delete slist;
}
}
//--------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
// Количество итераций в цикле столько, сколько
// строк в исходном коде
for (int i = 0; i < Memo1->Lines->Count; i++)
{//1
AnsiString temp = "";
AnsiString str = Memo1->Lines->Strings;
char *tempstr = str.c_str();
Memo2->Lines->Add("Анализ строчки: "+IntToStr(i+1));
// Количестово итераций в цикле столько,
// сколько символов в строке
for (int j=0; j<(Memo1->Lines->Strings).Length(); j++)
{//2
// Проверяем является ли символ
// буквой или цифрой
if (isalnum(tempstr[j]))
{//3
temp += tempstr[j];
// Проверка символа в таблице "Ключевых слов"
for (int k = 1; k < StringGrid1->RowCount; k++)
{//4
// Находится в таблице "ключевых слов"
if (StringGrid1->Cells[1] [k] == temp)
{//5
Memo2->Lines->Add("(1,"+
StringGrid1->Cells[0] [k]+") ");
temp = "";
}//5
else
{
if (k == StringGrid1->RowCount-1)
Memo3->Lines->Add("Элемент: "+temp+
" в таблице \'Ключевых слов\' нет");
}
}//4
// Проверка символа в таблице "Другие лексемы"
for (int k = 1; k < StringGrid3->RowCount; k++)
{//6
// Находится в таблице "Другие лексемы"
if (StringGrid3->Cells[1] [k] == temp)
{//7
Memo2->Lines->Add("(3,"+
StringGrid3->Cells[0] [k]+") ");
temp = "";
}//7
else
{
if (k == StringGrid3->RowCount-1)
Memo3->Lines->Add("Элемент: "+temp+
" в таблице \'Другие лексемы\' нет");
}
}//6
}//3
else
if (tempstr[j] != ' ')
{//8
temp = "";
temp += tempstr[j];
if ((tempstr[j] == ':' || tempstr[j] == '>' ||
tempstr[j] == '<') && tempstr[j+1] == '=')
temp += tempstr[j+1];
// Проверка символа в таблице "Служебные знаки"
for (int k = 1; k < StringGrid2->RowCount; k++)
{//9
// Находится в таблице "Служебные знаки"
if (StringGrid2->Cells[1] [k] == temp)
{//10
Memo2->Lines->Add("(2,"+
StringGrid2->Cells[0] [k]+") ");
temp = "";
}//10
else
{
if (k == StringGrid2->RowCount-1)
Memo3->Lines->Add("Элемент: "+temp+
" в таблице \'Служебные знаки\' нет");
}
}//9
temp = "";
}//8
}//2
}//1
}
//--------------------------------------------------------------
лексический анализатор для стороки sq;
please
ПЛИЗЗЗЗЗЗЗ. помогите бедной девушке.
1. Таблица «ключевых слов»:
SELECT, FROM, GROUPBY, HAVING
2. Таблица «служебные знаки»:
',', '<', ';'
3. Таблица «Другие лексемы»:
name, hj, mytable, age, 20
Лексический анализ заключается в том что каждая строка представляется ввиде комбинации двух цифр (номер таблицы и номер строки в таблице) для каждого элемента строки.
Приведу простой пример:
1 таблица
Номер Элемент
1 Program
2 integer
2 таблица
Номер Элемент
1 ,
2 ;
3 таблица
Номер Элемент
1 zuze1
2 zuze2
Количество строк в таблице сколько угодно
Вот я ввожу строку например такую
program zuze2;
Это строка после лексического анализа
(1,1) (3,2) (2,2)
zuze , спасибо. но как бы можно чуть поподробнее. как будут формироваться пары цифр - будет просматриваться таблица пока не найдется таблица с этим символом. А как я могу сформировать 3 таблицу, усли по условия между select и from могут быть любые слова(названия атрибутов), главное что б не было цыфр в названии атрибута. т.е. пользователь может ввести какие захочет атрибуты и прога должна это схавать. Я уже так запуталась. Ща вот сижу мучаюсь делаю через if . но это мне кажется тупо
Прошу прощения у "Модераторов" за то что я написал код на С++,
так как лексический анализатор можно написать на любом языке, но к сожалению я язык Java не знаю.
Код:
thanks. надеюсь получиться чето. еще раз спс
Если это не лаба, то можно посмотреть в сторону генераторов парсеров типа ANTLR and JavaCC.