2 / 2 / 1
Регистрация: 19.09.2015
Сообщений: 121
1

Лексический анализатор

28.03.2017, 23:54. Показов 16523. Ответов 5
Метки нет (Все метки)

Доброго времени суток. Сразу скажу, что я не прошу написать какую-либо программу, а лишь хочу услышать от вас пару советов.
Итак, тема моего курсового проекта по ООП - лексический анализатор языка Си(писать его нужно на c++). Лексический анализатор как мне известно, принимает на вход текст программы, а выдает последовательность токенов(тип лексемы и сама лексема). Я уже написал небольшую часть программы, и при подаче на вход кода ниже, она выдает такой результат(скриншот прилагается). Насколько такой лексический анализ корректный? Может я не совсем верно понимаю суть лексического анализа? Или вы можете предложить свой вариант анализа текста ниже?

Подаваемый на вход код:

C++
1
2
3
4
5
6
long long_var = 541001;
P+=12;
while (P!=0)
{
    P=P-2;
}
Миниатюры
Лексический анализатор  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2017, 23:54
Ответы с готовыми решениями:

Лексический анализатор
Получил задание. Ранее с++ не изучал. Если найдутся добрые люди, которые могут помочь, отзовитесь,...

Лексический анализатор
Написал программу, я надеюсь, лексического анализатора для конкретного куска программы. В программе...

Лексический анализатор
Здравствуйте. написать программу, которая выполняет лексический анализ входного текста в...

лексический анализатор на С++
Написать лексический анализатор на С++: разделители: , . ; бинарные операции: + - * / унарные...

5
1269 / 1026 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
29.03.2017, 08:52 2
Похоже на правду.

Добавлено через 43 секунды
Вот ещё полезная ссылка: Пишем свой интерпретатор языка BASIC
0
2842 / 774 / 41
Регистрация: 20.05.2012
Сообщений: 2,056
29.03.2017, 10:53 3
Лексический разбор - это анализ текста (высказывания), текстового фрагмента и т.д. с точки зрения поставленной цели такого исследования.
В узком понимании (не уверен, что таковое есть, но в вашем контексте не исключено...) - это анализ лексики (слов и словосочетаний).
В широком - научном значении - это последовательный нисходящий - от общего к составляющим элементам - разбор самой словесной ткани на всех языковых уровнях:
начиная с общего смысла высказывания оценивается, достигнуты ли его цели в целом (так, если я понятно объясню вам - то этот уровень я прошёл...).
В первую очередь, это анализ фабулы, архитектоники, композиции - составляющих частей (напр, в романе Толстого Война и мiр первые полкниги очевидно противопоставлены продолжению: от гламуристики к общечеловеч ценностям: так наз общая композиционная антитеза (из нонешних, кстати, вполне в тренде Баста-Ноггано:-)) ).
Ну и так далее (могу всего не вспомнить), от общих частей к взаимодейсвию их с частными, причём, как содержательно, так и фомально: манипулирование во времени событиями (Back to the Future...), параграфами, строфами, 'логикой' (я дышу - и значит, я люблю; я люблю - и, значит, я живу! Высоц.).

След уровень - синтаксисический: отдельные абзац (синтагма), предложение, фраза, отбивка...

Ну и - уровень собственно лексический, т.е. применение отд речевых средств с по св-ву соответствия необходимому содержанию, при этом нормативно правильно, уместно, выразительно, логично и т.д. - использоние в речи художественно-выразительных языковых (и не только: эмоции, смайлики, кляксы...) приёмов и средств, здешним слэнгом осмысленных как свойства\методы виртуальных объектов.

Уровень морфологический - состав отд слов. Уровень фонетический - звукового состава, самый 'низкоуровневый'.

В конце концов - правописание, пунктуация; эмоции, смайлики, кляксы...

Программирование, как следствие, происходит почти ровно по таким же закономерностям, за тем отличием,
как искусственый язык может похож на естественный (и естественно, далеко уйти от своего прародителя не может...)
0
Форумчанин
Эксперт CЭксперт С++
8191 / 5041 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
29.03.2017, 11:32 4
!= = += это операторы

Добавлено через 10 минут
Пока что то что вы привели в примере не позволяет полноценно оценить работу. Как обстоят дела с функциями, typedef, define (многострочными макрофункциями), struct, тернарными операторами, массивами, switch-case?

Добавлено через 2 минуты
Я бы взял Flex + Bison и описал грамматику.
Но на курсач это уже не тянет. Хотя, если вы потом планируете развить его в диплом..
Вообщем-то, если уже сделали "большую часть", как говорите, то для сдачи "курсача" можно просто дополнить хотя бы некоторыми элементами из списка выше.
0
2 / 2 / 1
Регистрация: 19.09.2015
Сообщений: 121
29.03.2017, 18:53  [ТС] 5
MrGluck,
Цитата Сообщение от MrGluck Посмотреть сообщение
!= = += это операторы
Я знаю что это операторы, но с другой стороны они играют роль разделителей. Так как их все-таки понимать?
И вот еще, я не понимаю как быть в такой ситуации. Допустим есть функция void func(int var) . Если эту строку подать на вход моего анализатора то будет что-то типа такого:
Ключевое слово void
Идентификатор func
Разделитель (
Ключевое слово int
Идентификатор var
Разделитель )
Но как мне известно "()" - это оператор вызова функции. Нужно ли в лексическом анализе это как-то указывать? Как тогда будет выглядеть выходная последовательность?
0
58 / 47 / 16
Регистрация: 17.07.2017
Сообщений: 214
17.01.2018, 14:01 6
Цитата Сообщение от Mendel Посмотреть сообщение
MrGluck,
Я знаю что это операторы, но с другой стороны они играют роль разделителей. Так как их все-таки понимать?
И вот еще, я не понимаю как быть в такой ситуации. Допустим есть функция void func(int var) . Если эту строку подать на вход моего анализатора то будет что-то типа такого:
Ключевое слово void
Идентификатор func
Разделитель (
Ключевое слово int
Идентификатор var
Разделитель )
Но как мне известно "()" - это оператор вызова функции. Нужно ли в лексическом анализе это как-то указывать? Как тогда будет выглядеть выходная последовательность?
Если я не ошибаюсь,
Цитата Сообщение от Mendel Посмотреть сообщение
Но как мне известно "()" - это оператор вызова функции. Нужно ли в лексическом анализе это как-то указывать?
за эту задачу отвечает парсер.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2018, 14:01
Помогаю со студенческими работами здесь

Лексический анализатор текста
Разработать лексический анализатор, который реализует конечный автомат для поиска во входном потоке...

Лексический, синтаксический анализатор c++
Помогите пожалуйста, мне очень сложно понять как это делать( Разработать лексический и...

Лексический анализатор языка лисп
нужно написать лексический анализатор языка лисп

Лексический анализатор - граф перехода КА
Здравствуйте Уважаемые Форумчане. Описание: входной язык содержит логические выражения,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru