Лексический и синтаксический анализатор языка высокого уровня
Проектирование программы-анализатора, состоящей из двух частей: лексического анализатора, разбивающего исходный текст программы на лексемы и заполняющего таблицу имен; синтаксического анализатора, проверяющего соответствие текста заданной грамматике.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 14.06.2010 |
Размер файла | 2,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
lSinProgress.Visible = false;
lvSinTable.Items.Clear();
int nLexNum = 0;
while (SintaxState == SinAnalizerState.InProcess)
{
sTopStack = (String) SintaxStack.Peek();
sLexeme = lvLexTable.Items[nLexNum].SubItems[0].Text;
sClass = lvLexTable.Items[nLexNum].SubItems[1].Text;
String[] subItems = {sTopStack, sLexeme, sClass};
lvSinTable.Items.Add(new ListViewItem(subItems));
if (sTopStack == "#")
{
SintaxState = (sLexeme == "#")?(SinAnalizerState.Accept):(SinAnalizerState.Error);
}
else if (sTopStack == "<S>")
{
if (sLexeme == "#")
{
SintaxStack.Pop();
}
else if (sLexeme == "PUBLIC")
{
Replace(SintaxStack, Grammatic, 1, 2);
nLexNum++;
}
else if (sLexeme == "USING")
{
Replace(SintaxStack, Grammatic, 0, 2);
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "LONG")
{
if (sLexeme == "LONG")
{
SintaxStack.Pop();
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "INT")
{
if (sLexeme == "INT")
{
SintaxStack.Pop();
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "(")
{
if (sLexeme == "(")
{
SintaxStack.Pop();
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == ")")
{
if (sLexeme == ")")
{
SintaxStack.Pop();
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == ";")
{
if (sLexeme == ";")
{
SintaxStack.Pop();
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "{")
{
if (sLexeme == "{")
{
SintaxStack.Pop();
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "}")
{
if (sLexeme == "}")
{
SintaxStack.Pop();
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<CLASS_BODY>")
{
if (sLexeme == "PUBLIC")
{
Replace(SintaxStack, Grammatic, 8, 2);
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<CLASS>")
{
if (sLexeme == "CLASS")
{
Replace(SintaxStack, Grammatic, 7, 2);
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<DEF_LIST>")
{
if (sClass == "Идентификатор")
{
Replace(SintaxStack, Grammatic, 14, 2);
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<DEF>")
{
if (sLexeme == "UINT")
{
Replace(SintaxStack, Grammatic, 11, 2);
nLexNum++;
}
else if (sLexeme == "BOOL")
{
Replace(SintaxStack, Grammatic, 12, 2);
nLexNum++;
}
else if (sLexeme == "CONST")
{
Replace(SintaxStack, Grammatic, 13, 2);
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<EXPR>")
{
if (sLexeme == "(")
{
Replace(SintaxStack, Grammatic, 35, 2);
nLexNum++;
}
else if (sClass == "Идентификатор")
{
Replace(SintaxStack, Grammatic, 36, 2);
nLexNum++;
}
else if (sClass == "Число")
{
Replace(SintaxStack, Grammatic, 37, 2);
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<LET>")
{
if (sLexeme == "/")
{
Replace(SintaxStack, Grammatic, 34, 2);
nLexNum++;
}
else if (sLexeme == "*")
{
Replace(SintaxStack, Grammatic, 33, 2);
nLexNum++;
}
else if (sLexeme == "=")
{
Replace(SintaxStack, Grammatic, 32, 2);
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<NEXT_BODY>")
{
if (sLexeme == ";")
{
Replace(SintaxStack, Grammatic, 9, 2);
nLexNum++;
}
else if (sLexeme == "}")
{
SintaxStack.Pop();
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<NEXT_DEF>")
{
if (sLexeme == "(")
{
Replace(SintaxStack, Grammatic, 15, 2);
nLexNum++;
}
else if (sLexeme == ",")
{
Replace(SintaxStack, Grammatic, 16, 2);
nLexNum++;
}
else if (sLexeme == "=")
{
Replace(SintaxStack, Grammatic, 17, 2);
nLexNum++;
}
else if (sLexeme == ";")
{
SintaxStack.Pop();
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<NEXT_OPER>")
{
if (sLexeme == ";")
{
Replace(SintaxStack, Grammatic, 24, 2);
nLexNum++;
}
else if (sLexeme == "}")
{
SintaxStack.Pop();
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<NEXT_USING>")
{
if (sLexeme == ".")
{
Replace(SintaxStack, Grammatic, 5, 2);
nLexNum++;
}
else if (sLexeme == ";")
{
SintaxStack.Pop();
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<NEXT_VAR>")
{
if (sLexeme == ",")
{
Replace(SintaxStack, Grammatic, 20, 2);
nLexNum++;
}
else if (sLexeme == "=")
{
Replace(SintaxStack, Grammatic, 21, 2);
nLexNum++;
}
else if ((sLexeme == ")") || (sLexeme == ";"))
{
SintaxStack.Pop();
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<NEXT>")
{
if (sLexeme == ";")
{
Replace(SintaxStack, Grammatic, 2, 2);
nLexNum++;
}
else if (sLexeme == "#")
{
SintaxStack.Pop();
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<OPER_LIST>")
{
if ((sLexeme == "FOR") ||
(sLexeme == "CONTINUE") ||
(sLexeme == "BREAK") ||
(sLexeme == "READ") ||
(sLexeme == "WRITE") ||
(sClass == "Идентификатор"))
{
Replace(SintaxStack, Grammatic, 23, 1);
}
else if (sLexeme == "}")
{
SintaxStack.Pop();
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<OPERATION>")
{
if (sLexeme == "+")
{
Replace(SintaxStack, Grammatic, 38, 2);
nLexNum++;
}
else if (sLexeme == "-")
{
Replace(SintaxStack, Grammatic, 39, 2);
nLexNum++;
}
else if ((sLexeme == ")") ||
(sLexeme == ";") ||
(sLexeme == ",") ||
(sLexeme == ">") ||
(sLexeme == "<") ||
(sLexeme == "="))
{
SintaxStack.Pop();
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<OPERATOR>")
{
if (sLexeme == "FOR")
{
Replace(SintaxStack, Grammatic, 26, 2);
nLexNum++;
}
else if (sLexeme == "BREAK")
{
SintaxStack.Pop();
nLexNum++;
}
else if (sLexeme == "CONTINUE")
{
SintaxStack.Pop();
nLexNum++;
}
else if (sLexeme == "READ")
{
Replace(SintaxStack, Grammatic, 30, 2);
nLexNum++;
}
else if (sLexeme == "WRITE")
{
Replace(SintaxStack, Grammatic, 29, 2);
nLexNum++;
}
else if (sClass == "Идентификатор")
{
Replace(SintaxStack, Grammatic, 31, 2);
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<USING_LIST>")
{
if (sClass == "Идентификатор")
{
Replace(SintaxStack, Grammatic, 4, 2);
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<COND>")
{
if (sLexeme == "(")
{
Replace(SintaxStack, Grammatic, 41, 2);
nLexNum++;
}
else if ((sClass == "Идентификатор") ||
(sClass == "Число"))
{
Replace(SintaxStack, Grammatic, 42, 1);
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<RELATION>")
{
if (sLexeme == ">")
{
Replace(SintaxStack, Grammatic, 43, 2);
nLexNum++;
}
else if (sLexeme == "<")
{
Replace(SintaxStack, Grammatic, 44, 2);
nLexNum++;
}
else if (sLexeme == "=")
{
Replace(SintaxStack, Grammatic, 45, 2);
nLexNum++;
}
else if ((sLexeme == ")") ||
(sLexeme == ";"))
{
SintaxStack.Pop();
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "<VAR_LIST>")
{
if (sClass == "Идентификатор")
{
Replace(SintaxStack, Grammatic, 19, 2);
nLexNum++;
}
else if (sLexeme == ";")
{
SintaxStack.Pop();
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "=")
{
if (sLexeme == "=")
{
SintaxStack.Pop();
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else if (sTopStack == "ID")
{
if (sClass == "Идентификатор")
{
SintaxStack.Pop();
nLexNum++;
}
else SintaxState = SinAnalizerState.Error;
}
else SintaxState = SinAnalizerState.Error;
if (SintaxState == SinAnalizerState.Error)
{
lSinProgress.Text = "ОШИБКА! Неправильный синтаксис";
lSinProgress.ForeColor = Color.Red;
}
else if (SintaxState == SinAnalizerState.Accept)
{
lSinProgress.Text = "Синтаксический анализ завершен успешно!";
lSinProgress.ForeColor = Color.Blue;
}
}
lSinProgress.Visible = true;
btnSintax.Enabled = false;
синтаксическийАнализToolStripMenuItem.Enabled = false;
}
Цель данного проекта: практическое применение теории формальных грамматик и теории автоматов для проектирования трансляторов.
Постановка задания: Спроектировать и построить лексический и синтаксический анализаторы для заданного формального языка программирования. Построить и реализовать в лексическом анализаторе распознаватель лексем с заданной структурой: Нагруженное дерево (один элемент дерева хранит один символ (букву входного алфавита) лексемы).
Учебный язык включает директиву using, функцию main(), описание переменных, констант, массива переменной длины, операторов присваивания, арифметические операции. За основу лексики, синтаксиса и семантики учебного языка принять стандарты языка программирования С#.
Рассмотренная регулярная грамматика может быть реализована автоматом с множеством состояний G: [S, I, C, E, R], где
S - состояние ожидания первого символа лексемы;
I - состояние ожидания символов идентификаторов: буквы, цифры;
С - состояние ожидания символов целой части числа;
E -состояние ошибки;
R - состояние допуска лексемы.
Автомат переходит в допустимое состояние R из состояний S, I, C по символу конца лексемы - пробел или разделительного знака. Автомат определен множеством перечисленных состояний, множеством правил [1, 2, … , 47] и множеством входных символов [00..9, A..Z, «-», «#», «(», «)», «*», «,», «.», «/», «:», «;», «{«, «}», «+», «=»], из которых символы подмножества [«-», «#», «(», «)», «*», «,», «/», «:», «;», «{«, «}», «+», «=»] являются одновременно разделительными символами и уникальными лексемами. Таблица переходов автомата распознавателя идентификаторов представлена ниже на таблице.
L |
D |
e |
|||
S |
I |
E |
S |
Нач. состояние |
|
I |
I |
I |
R |
||
E |
Ошибка |
||||
R |
Допустить |
||||
Множества ВЫБОР: ВЫБОР(48) using ВЫБОР(49) public ВЫБОР(50) ; ВЫБОР(51) # ВЫБОР(52) ID ВЫБОР(53) . ВЫБОР(54) ; ВЫБОР(55) class ВЫБОР(56) public ВЫБОР(57) ; ВЫБОР(58) } ВЫБОР(59) uint ВЫБОР(60) bool ВЫБОР(61) const ВЫБОР(62) ID ВЫБОР(63) ( ВЫБОР(64) , ВЫБОР(65) = ВЫБОР(66) ; ВЫБОР(67) ID ВЫБОР(68) , ВЫБОР(69) = ВЫБОР(70) ) ВЫБОР(71) for break continue write read ID ВЫБОР(72) ; ВЫБОР(73) } ВЫБОР(74) for ВЫБОР(75) break ВЫБОР(76) continue ВЫБОР(77) write ВЫБОР(78) read ВЫБОР(79) ID ВЫБОР(80) = ВЫБОР(81) * ВЫБОР(82) / ВЫБОР(83) ( ВЫБОР(84) ID ВЫБОР(85) NUM ВЫБОР(86) + ВЫБОР(87) - ВЫБОР(88) ID ; ) < > = ВЫБОР(89) ( ВЫБОР(90) ( ID NUM ВЫБОР(91) > ВЫБОР(92) < ВЫБОР(93) = ВЫБОР(94) ; ) |
Формальная грамматика языка программирования: Грамматика целевого символа: ( 1) <S> -> using <USING_LIST> <NEXT> ( 2) <S> -> public <CLASS> <NEXT> ( 3) <NEXT> -> ; <S> ( 4) <NEXT> -> e Грамматика описания using: ( 5) <USING_LIST> -> ID <NEXT_USING> ( 6) <NEXT_USING> -> . <USING_LIST> ( 7) <NEXT_USING> -> e Грамматика описания класса: ( 8) <CLASS> -> class ID { <CLASS_BODY> } ( 9) <CLASS_BODY> -> public <DEF> <NEXT_BODY> (10) <NEXT_BODY> -> ; <CLASS_BODY> (11) <NEXT_BODY> -> e Грамматика описания определения полей и методов класса: (12) <DEF> -> uint <DEF_LIST> (13) <DEF> -> bool <DEF_LIST> (14) <DEF> -> const long int <DEF_LIST> (15) <DEF_LIST> -> ID <NEXT_DEF> (16) <NEXT_DEF> -> ( <VAR_LIST> ) { <OPER_LIST> } (17) <NEXT_DEF> -> , <VAR_LIST> (18) <NEXT_DEF> -> = <EXPR> <VAR_LIST> (19) <NEXT_DEF> -> e (20) <VAR_LIST> -> ID <NEXT_VAR> (21) <NEXT_VAR> -> , <VAR_LIST> (22) <NEXT_VAR> -> = <EXPR> <VAR_LIST> (23) <NEXT_VAR> -> e Грамматика описания списка операторов: (24) <OPER_LIST> -> <OPERATOR> <NEXT_OPER> (25) <NEXT_OPER> -> ; <OPER_LIST> (26) <NEXT_OPER> -> e |
Грамматика описания операторов: (27) <OPERATOR> -> for ( ID = <EXPR> ; <COND> ; ID <LET> ) { <OPER_LIST> } (28) <OPERATOR> -> break (29) <OPERATOR> -> continue (30) <OPERATOR> -> write ( <VAR_LIST> ) (31) <OPERATOR> -> read ( <VAR_LIST> ) (32) <OPERATOR> -> ID <LET> (33) <LET> -> = <EXPR> (34) <LET> -> * = <EXPR> (35) <LET> -> / = <EXPR> Грамматика описания арифметического выражения: (36) <EXPR> -> ( <EXPR> ) <OPERATION> (37) <EXPR> -> ID <OPERATION> (38) <EXPR> -> NUM <OPERATION> (39) <OPERATION> -> + <EXPR> (40) <OPERATION> -> - <EXPR> (41) <OPERATION> -> e Грамматика описания условия: (42) <COND> -> ( <COND> ) <RELATION> (43) <COND> -> <EXPR> <RELATION> (44) <RELATION> -> > <COND> (45) <RELATION> -> < <COND> (46) <RELATION> -> = = <COND> (47) <RELATION> -> e |
Управляющая таблица синтаксического анализатора
|
/ |
- |
# |
( |
) |
* |
, |
. |
; |
{ |
} |
+ |
< |
= |
> |
bool |
break |
class |
const |
continue |
for |
ID |
int |
long |
NUM |
public |
read |
using |
write |
|
# |
|
|
Д |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
( |
|
|
|
В С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
) |
|
|
|
|
В С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
В С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
В С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
В С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<CLASS_BODY> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
З(9, 2) С |
|
|
|
|
<CLASS> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
З(8, 2) С |
|
|
|
|
|
|
|
|
|
|
|
|
<COND> |
|
|
|
З(42, 2) С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
З(43, 1) |
|
|
З(43, 1) |
|
|
|
|
|
<DEF_LIST> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
З(15, 2) С |
|
|
|
|
|
|
|
|
<DEF> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
З(13, 2) С |
|
|
З(14, 2) С |
|
|
|
|
|
|
|
|
|
|
|
<EXPR> |
|
|
|
З(36, 2) С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
З(37, 2) С |
|
|
З(38, 2) С |
|
|
|
|
|
<LET> |
З(35, 2) С |
|
|
|
|
З(34, 2) С |
|
|
|
|
|
|
|
З(33, 2) С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<NEXT_BODY> |
|
|
|
|
|
|
|
|
З(10, 2) С |
|
В |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<NEXT_DEF> |
|
|
|
З(16, 2) С |
|
|
З(17, 2) С |
|
В |
|
|
|
|
З(18, 2) С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<NEXT_OPER> |
|
|
|
|
|
|
|
|
З(25, 2) С |
|
В |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<NEXT_USING> |
|
|
|
|
|
|
|
З(6, 2) С |
В |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<NEXT_VAR> |
|
|
|
|
В |
|
З(21, 2) С |
|
В |
|
|
|
|
З(22, 2) С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<NEXT> |
|
|
В |
|
|
|
|
|
З(3, 2) С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<OPER_LIST> |
|
|
|
|
|
|
|
|
|
|
В |
|
|
|
|
|
З(24, 1) |
|
|
З(24, 1) |
З(24, 1) |
З(24, 1) |
|
|
|
|
З(24, 1) |
|
З(24, 1) |
|
<OPERATION> |
|
З(40, 2) С |
|
|
В |
|
|
|
В |
|
|
З(39, 2) С |
В |
В |
В |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<OPERATOR> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В С |
|
|
В С |
З(27, 2) С |
З(32, 2) С |
|
|
|
|
З(31, 2) С |
|
З(30, 2) С |
|
<RELATION> |
|
|
|
|
В |
|
|
|
В |
|
|
|
З(45, 2) С |
З(46, 2) С |
З(44, 2) С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<S> |
|
|
В |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
З(2, 2) С |
|
З(1, 2) С |
|
|
<USING_LIST> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
З(5, 2) С |
|
|
|
|
|
|
|
|
<VAR_LIST> |
|
|
|
|
|
|
|
|
В |
|
|
|
|
|
|
|
|
|
|
|
|
З(20, 2) С |
|
|
|
|
|
|
|
|
= |
|
|
|
|
|
|
|
|
|
|
|
|
|
В С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ID |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В С |
|
|
|
|
|
|
|
|
int |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В С |
|
|
|
|
|
|
|
long |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В С |
|
|
|
|
|
Подобные документы
Написание программы, которая выполняет лексический и синтаксический анализ входного языка программирования, порождает таблицу лексем с указанием их типов и значений, а также строит синтаксическое дерево; текст входного языка вводится с клавиатуры.
курсовая работа [761,5 K], добавлен 23.02.2012Методы грамматического разбора при разработке учебного транслятора. Проектирование лексического анализатора и магазинного автомата. Программная реализация синтаксического анализатора текстового языка высокого уровня. Разработка модуля интерпретации.
курсовая работа [697,2 K], добавлен 06.01.2013Транслятор как программа или техническое средство, выполняющее трансляцию программы. Рассмотрение основных особенностей постройки лексического анализатора. Знакомство с этапами разработки транслятора с ограниченного подмножества языка высокого уровня.
курсовая работа [580,5 K], добавлен 06.08.2013Разработка технического задания на проектирование, определение требований к программе. Предварительный выбор метода решения синтаксического анализатора, проектирование программного приложения, конфигурация технических средств программы и её тестирование.
курсовая работа [28,5 K], добавлен 28.06.2011Организация таблицы идентификаторов, ее содержание и назначение. Метод бинарного дерева и цепочек. Проектирование лексического анализатора и схема распознавателя. Построение дерева вывода, синтаксический анализатор. Анализ результатов работы программы.
курсовая работа [1,0 M], добавлен 25.12.2014Структура, классификация и требования к реализации компилятора. Проектирование и реализация анализирующей части компилятора языка С++. Способы реализации лексического анализа. Алгоритм работы синтаксического анализатора. Принципы программной реализации.
курсовая работа [774,2 K], добавлен 26.01.2013Создание алгоритма для построения синтаксического анализатора полиномов и его реализация в среде Visual Studio 2005 на языке программирования C#. Программное решение задачи поиска максимального числа единиц в бинарном представлении простых чисел.
курсовая работа [723,5 K], добавлен 04.10.2010Программная реализация синтаксического анализатора произвольного текста. Матрица и дерево переходов для программы. Код программы с построчным комментарием. Порядок запуска среды разработки Visual Studio. Интерфейс и номера Лихтенштейна, скриншот.
контрольная работа [855,1 K], добавлен 13.02.2014Создание транслятора, обрабатывающего код программы на языке Паскаль и за счет эквивалентных операторов генерирующего программу на Си. Особенности внешней спецификации и работы лексического анализатора. Структура программы, вывод результатов на экран.
курсовая работа [254,0 K], добавлен 02.07.2011Описание синтаксиса и семантики входного языка. Описание типов лексем, определение их синтаксиса. Построение диаграммы лексического анализатора, а также его таблицы, тестирование. Построение КС-грамматики входного языка. Описание промежуточного языка.
курсовая работа [83,0 K], добавлен 23.01.2014