11 / 11 / 3
Регистрация: 06.08.2011
Сообщений: 208
1

Лексический, Синтаксический анализ

20.12.2017, 19:21. Показов 2030. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер.
Помогите разобраться с написанием анализаторов.

На сколько я поняла этапы анализа складываются из:
1. Лексический анализ – разбиение на атомарные элементы, или лексемы
2. Синтаксический анализ – разбиение на «предложения», построение деревьев
3. Семантический анализ – определение «смысла» предложений

В первом (Лексическом анализе ) необходимо получить на вход строку и разобрать на символы.
Это вроде получилось. может и не правильно и разбор делается как то по другому, пока не знаю.
А вот как написать синтаксический анализ, не понимаю.

Вот код:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int main()
{
//Лексический анализ
    QString str = "VAR=(5+TAX)*0.908"; // строка поиска
    QRegExp groups("([A-Z0-9=\+\*(\)\.])"); // Разбить строку на лексемы
    QRegExp vars("([a-zA-Z])"); // Выбрать переменные
    QStringList list, l_digit, l_oper, l_vars, l_hooks;
    char temp[20];
    int pos = 0;
    int i = 0;
    char* con = new char[ 10];
 
    while ((pos = groups.indexIn(str, pos)) != -1) {  //выводим знак
        list << groups.cap(1);
        pos += groups.matchedLength();
    }
    qDebug() <<"l_oper = "<< list;
 
// Синтаксический анализ, или парсинг (parsing) – процесс анализа входной последовательности символов
//обычно осуществляется в соответствии с заданной формальной грамматикой
 
    pos = 0; // обнулим
    ///вот здесь застопарилось.....
       while ((pos = vars.indexIn(str, pos)) != -1) {  //выводим символы
           l_vars << vars.cap(1);
           pos += vars.matchedLength(); //здесь ошибка
           strcpy(con[i], *l_vars);
       }
       qDebug() <<"vars = "<< temp;
 
 
    return 0;
}
qDebug() <<"l_oper = "<< list; выводит список
l_oper = ("C", "O", "S", "T", "=", "(", "5", "+", "T", "A", "X", ")", "*", "0", ".", "9", "0", "8")

Дальше этот список необходимо обработать, разобрать на переменные, константы, знаки операций, числа.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2017, 19:21
Ответы с готовыми решениями:

Лексический и синтаксический анализ текста
Доброго времени суток, товарищи.Сейчас учусь в универе и дали задание курсовой работы на с++.Я...

Лексический и синтаксический анализ текста
Доброго времени суток, нужно написать курсач по программированию - реализовать алгоритм...

Лексический и синтаксический анализаторы
здравствуйте.нужна помощь, по flex\bison, чтение драгон бука и поиска и google уже не хватает ,так...

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

0
20.12.2017, 19:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2017, 19:21
Помогаю со студенческими работами здесь

лексический анализ.....
Составить таблицу терминальных символов (включая операции +, – = и объявление типов), таблицу...

лексический анализ
Добрый вечер всем. У меня такая проблема: мне надо разобрать строку на запчасти. Смысл такой - с...

лексический анализ дубль 2
у меня собственно говоря опять проблема. Лексический разбор многочлена. Только на этот раз я пошел...

Синтаксический анализ
Много кто берётся но мало кто доводит до конца эту тему... Я написал класс Expression смысл...


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

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

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