Автор работы: Пользователь скрыл имя, 26 Июня 2013 в 01:35, лабораторная работа
Построение программы лексического анализатора, корректно распознающего все перечисленные выше лексемы и формирующего таблицы лексем и внутреннее представление проанализированного текста.
else
z = operatSearch(str, Ch, h);
}
else
if (Ch == '*')
{
z = h + 1; b = str[z];
if (b == '/') //значит закончился многострочный комментарий
{
sr += b; int g = 0;
for (int i = 0; i < (dataSplit.Rows.Count) - 1; i++)
{
if (dataSplit.Rows[i].Cells[0].
}
richTextBox2.Text += "D" + dataSplit.Rows[g].Cells[1].
comment = 0;
}
}
else
if (Ch=='\'')
{
int g = 0;
for (int i = 0; i < (dataSplit.Rows.Count) - 1; i++)
{
if (dataSplit.Rows[i].Cells[0].
}
richTextBox2.Text += "D" + dataSplit.Rows[g].Cells[1].
if (sconst == 3)
{
sconst = 0;
}
else
{
sconst = 1;
b=str[z+1];
z = symbolSearch(str, b, z + 1);
}
//вызов обработки символьных констант
}
else if(Ch=='\"')
{
int g = 0;
for (int i = 0; i < (dataSplit.Rows.Count) - 1; i++)
{
if (dataSplit.Rows[i].Cells[0].
}
richTextBox2.Text += "D" + dataSplit.Rows[g].Cells[1].
if (sconst == 3)
{
sconst = 0;
}
else
{
sconst = 2;
//вызов обработки символьных констант
b = str[z + 1];
z = symbolSearch(str, b, z + 1);
}
}
else
{
int g = 0;
for (int i = 0; i < (dataSplit.Rows.Count) - 1; i++)
{
if (dataSplit.Rows[i].Cells[0].
}
richTextBox2.Text += "D" + dataSplit.Rows[g].Cells[1].
}
this.Refresh();
return z;
}
private int symbolSearch(string str, char Ch, int h)
{
int z=h;
string sr; char b;
sr = Ch.ToString();
if (sconst == 1)//значит пришла одинарная константа, берем один символ и возвращаемся к обработке кавычек
{
//проверка наличия в таблицах, если нет - дописать
int flag = 0; int g = 0;
sconst = 3;
for (int i = 0; i < (dataSymbolConst.Rows.Count) - 1; i++)
{
if (dataSymbolConst.Rows[i].
}
if (flag == 1)//значит уже есть в переменных
richTextBox2.Text += "S" + dataSymbolConst.Rows[g].Cells[
else
//дописываем в symbol
{
dataSymbolConst.Rows.Add(sr, (dataSymbolConst.Rows.Count - 1).ToString());
g = dataSymbolConst.Rows.Count - 2;
richTextBox2.Text += "S" + dataSymbolConst.Rows[g].Cells[
}
}
if (sconst == 2)//значит пришла строковая константа, берем один символ и возвращаемся к обработке кавычек
{
// набираем строку
for (z = h + 1; z < str.Length; z++)
{
b = str[z];
if (b != '\"') sr += b;
else { z--; break; }
}
//проверка наличия в таблицах, если нет - дописать
int flag = 0; int g = 0; sconst = 3;
for (int i = 0; i < (dataSymbolConst.Rows.Count) - 1; i++)
{
if (dataSymbolConst.Rows[i].
}
if (flag == 1)//значит уже есть в переменных
richTextBox2.Text += "S" + dataSymbolConst.Rows[g].Cells[
else
//дописываем в symbol
{
dataSymbolConst.Rows.Add(sr, (dataSymbolConst.Rows.Count - 1).ToString());
g = dataSymbolConst.Rows.Count - 2;
richTextBox2.Text += "S" + dataSymbolConst.Rows[g].Cells[
}
}
if (comment == 1)
{
for (z=h; z < str.Length; z++)
{
b = str[z];
sr += b;
}
comment = 0;
int flag = 0; int g = 0;
for (int i = 0; i < (dataSymbolConst.Rows.Count) - 1; i++)
{
if (dataSymbolConst.Rows[i].
}
if (flag == 1)//значит уже есть в переменных
richTextBox2.Text += "S" + dataSymbolConst.Rows[g].Cells[
else
//дописываем в symbol
{
dataSymbolConst.Rows.Add(sr, (dataSymbolConst.Rows.Count - 1).ToString());
g = dataSymbolConst.Rows.Count - 2;
richTextBox2.Text += "S" + dataSymbolConst.Rows[g].Cells[
}
}
if (comment == 2)
{
for (z = h; z < str.Length; z++)
{
b = str[z];
if ((b == '*') && (str[z + 1] == '/')) { z--; comment = 0; break; }
else
{
sr += b;
}
comment = 3;
}
if (comment == 3)
{
next += sr;
}
else
{
next += sr;
int flag = 0; int g = 0;
for (int i = 0; i < (dataSymbolConst.Rows.Count) - 1; i++)
{
if (dataSymbolConst.Rows[i].
}
if (flag == 1)//значит уже есть в переменных
richTextBox2.Text += "S" + dataSymbolConst.Rows[g].Cells[
else
//дописываем в symbol
{
dataSymbolConst.Rows.Add(next, (dataSymbolConst.Rows.Count - 1).ToString());
g = dataSymbolConst.Rows.Count - 2;
richTextBox2.Text += "S" + dataSymbolConst.Rows[g].Cells[
}
}
}
this.Refresh();
return z;
}
/// <summary>
/// обработка нажатия кнопки
/// </summary>
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog OP = new OpenFileDialog();
OP.FileName = "";
OP.Filter = "TXT File (*.txt) | *.txt ";
OP.Title = "Открыть документ";
if (OP.ShowDialog() != DialogResult.Cancel)
{
{
try
{
richTextBox1.LoadFile(OP.
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), ex.Source);
}
}
}
sName = OP.FileName;
OP.Dispose();
//загрузка таблиц
string[] buf = sName.Split('\\');
sName = buf[0];
//operation
StreamReader file = new StreamReader(sName+"\\
while ((line = file.ReadLine()) != null)
{
string[] split = line.Split('\t');
//записываем в столбец
dataOperation.Rows.Add(split[
}
file.Close();
file.Dispose();
StreamReader file3 = new StreamReader(sName + "\\prioritet.txt");
while ((line = file3.ReadLine()) != null)
{
string[] split = line.Split('\t');
//записываем в столбец
dataPrioritet.Rows.Add(split[
}
file3.Close();
file3.Dispose();
//words
StreamReader file1 = new StreamReader(sName+"\\words.
while ((line = file1.ReadLine()) != null)
{
string[] split = line.Split('\t');
dataWords.Rows.Add(split[0], split[1]);
}
file1.Close(); file1.Dispose();
//separator
StreamReader file2 = new StreamReader(sName+"\\
while ((line = file2.ReadLine()) != null)
{
string[] split = line.Split('\t');
dataSplit.Rows.Add(split[0], split[1]);
}
file2.Close(); file2.Dispose();
}
private void buttonConvert_Click(object sender, EventArgs e)
{
richTextBox2.Clear();
Reader();
}
private void buttonSave_Click(object sender, EventArgs e)
{
richTextBox2.SaveFile(sName+"\
}
}
}
Информация о работе Построение программы лексического анализатора