Рефераты. Интерактивный интерпретатор

}

private bool IsKeyword(string str)

public void GetNext(out int beg, out int len, out TokenType type) {

if (m_cur >= m_len)

throw new IndexOutOfRangeException();

beg = m_cur;

if (m_a[m_cur] == '\"') {

m_cur++;

while ((m_cur < m_len) && (m_a[m_cur] != '\"'))

m_cur++;

if (m_cur < m_len)

m_cur++;

len = m_cur - beg;

type = TokenType.String;

}

else if (isL(m_a[m_cur])) {

m_cur++;

while ((m_cur < m_len) && isLD(m_a[m_cur]))

m_cur++;

len = m_cur - beg;

if (IsKeyword(new string(m_a, beg, len)))

type = TokenType.Keyword;

else

type = TokenType.Identifier;

}

else if (m_a[m_cur] == '#') {

len = m_len - m_cur;

m_cur = m_len;

type = TokenType.Comment;

}

else if (m_a[m_cur] == '.') {

if (GetNumber()) {

len = m_cur - beg;

type = TokenType.Number;

}

else {

m_cur = beg + 1;

len = 1;

type = TokenType.Other;

}

}

else if (char.IsDigit(m_a[m_cur])) {

GetNumber();

len = m_cur - beg;

type = TokenType.Number;

}

else {

m_cur++;

len = 1;

type = TokenType.Other;

}

while ((m_cur < m_len) && Char.IsWhiteSpace(m_a[m_cur]))

m_cur++;

}

private bool GetNumber() {

if (!((m_a[m_cur] == '.') || char.IsDigit(m_a[m_cur])))

return false;

while ((m_cur < m_len) && char.IsDigit(m_a[m_cur]))

m_cur++;

if (m_cur == m_len)

return true;

else if (m_a[m_cur] == '.') {

m_cur++;

while ((m_cur < m_len) && char.IsDigit(m_a[m_cur]))

m_cur++;

if (m_cur == m_len)

return true;

else if ((m_a[m_cur] == 'e') || (m_a[m_cur] == 'E')) {

int p1 = m_cur;

m_cur++;

if (m_cur == m_len) {

m_cur = p1;

return true;

}

else if ((m_a[m_cur] == '-') || (m_a[m_cur] == '+')) {

m_cur++;

if ((m_cur == m_len) || !char.IsDigit(m_a[m_cur])) {

m_cur = p1;

return true;

}

while ((m_cur < m_len) && char.IsDigit(m_a[m_cur]))

m_cur++;

return true;

}

else if (char.IsDigit(m_a[m_cur])) {

while ((m_cur < m_len) && char.IsDigit(m_a[m_cur]))

m_cur++;

return true;

}

else {

m_cur = p1;

return true;

}

}

else

return true;

}

else if ((m_a[m_cur] == 'e') || (m_a[m_cur] == 'E')) {

int p1 = m_cur;

m_cur++;

if (m_cur == m_len) {

m_cur = p1;

return true;

}

else if ((m_a[m_cur] == '-') || (m_a[m_cur] == '+')) {

m_cur++;

if ((m_cur == m_len) || !char.IsDigit(m_a[m_cur])) {

m_cur = p1;

return true;

}

while ((m_cur < m_len) && char.IsDigit(m_a[m_cur]))

m_cur++;

return true;

}

else if (char.IsDigit(m_a[m_cur])) {

while ((m_cur < m_len) && char.IsDigit(m_a[m_cur]))

m_cur++;

return true;

}

else {

m_cur = p1;

return true;

}

}

else

return true;

}

private static bool isLD(char c)

private static bool isL(char c)

}

}

}

19. Класс Form1.

using System;

using System.ComponentModel;

using System.Windows.Forms;

namespace interpr {

public class Form1 : Form {

private Panel panel1;

private Button button1;

private Button button2;

private Button button3;

private Button button4;

private Button button5;

private ConsoleBox consoleBox1;

private Facade m_fasade;

private void Form1_Load(object sender, EventArgs e) {

Facade.Create(consoleBox1);

m_fasade = Facade.Instance;

if (m_fasade.NotRestored) {

MessageBox.Show("Ошибка! Переменные не были успешно восстановлены.");

}

m_fasade.Done += new Facade.CommandDoneHandler(EndExec);

m_fasade.LoadSubs();

consoleBox1.Prompt();

}

private void EndExec() {

consoleBox1.Prompt();

}

private void button1_Click(object sender, EventArgs e) {

if (m_fasade.Busy) {

MessageBox.Show("Не могу открыть окно функций во время выполнения комманды!");

return;

}

FunctionsForm ff = new FunctionsForm(m_fasade);

ff.ShowDialog();

EditorForm ef = ff.LastOpenedEditorForm;

if (ef != null) {

ef.Activate();

ff.SetLastEditorFormNull();

}

else

consoleBox1.Focus();

}

private void button2_Click(object sender, EventArgs e) {

if (m_fasade.Busy) {

MessageBox.Show("Не могу открыть окно переменных во время выполнения комманды!");

return;

}

VariablesForm vf = new VariablesForm(m_fasade);

vf.ShowDialog();

consoleBox1.Focus();

}

private void consoleBox1_GetCommand(object sender, ConsoleBoxGetCommandEventArgs e) {

if (e.Command.Length > 0)

m_fasade.ExecuteCommand(e.Command);

else

consoleBox1.Prompt();

}

private void button3_Click(object sender, EventArgs e) {

m_fasade.Restart();

if (m_fasade.NotRestored) {

MessageBox.Show("Ошибка! Переменные не были успешно восстановлены.");

}

consoleBox1.Focus();

}

private void button5_Click(object sender, EventArgs e) {

if (m_fasade.Busy) {

MessageBox.Show("Не могу сохранить переменные во время выполнения программы");

return;

}

m_fasade.SaveVariables();

consoleBox1.Focus();

}

private void Form1_Closing(object sender, CancelEventArgs e) {

if (EditorForm.ThereAreOpened()) {

MessageBox.Show("Сначала закройте все окна редактора кода.");

e.Cancel = true;

return;

}

m_fasade.SaveVariables();

}

private void button4_Click(object sender, EventArgs e) {

this.Close();

}

}

}

Использованная литература и документация.

1. А. Ахо, Дж. Хопкрофт, Д. Ульман. Структуры данных и алгоритмы - М. «Вильямс», 2003.

2. Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования: паттерны проектирования - СПб., «Питер», 2001.

3. Д. Грис. Конструирование компиляторов для цифровых вычислительных машин - М. «Мир», 1975.

4. Г. Корнелл, Дж. Моррисон. Программирование на VB.NET. Учебный курс - СПб., «Питер», 2002.

5. Э. Троелсен. C# и платформа .NET - СПб., «Питер», 2004.

6. MSDN Library - April 2003.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.