|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
Дерево разбора12.03.2011, 02:03. Показов 32894. Ответов 34
Вообщем суть - нужно уметь распарсить любую логическую формулу и затем сделать с ней нечто по заданию (курсовик). Спросили у препода как лучше, он сказал, что лучше через дерево...
Ну с деревом вопросов нет... Но вот как распарсить и расставить приоритет у формул - вопрос. Допустим есть некая формула (x&y&z)|t Получается дерево должно выглядеть как. корень - | лево - (x&y&z) право - t Ну и так, далее. Я правильно уловил суть? Вопрос, как расставить так приоритеты, но мне не нужен код, просто некое небольшое объяснение и мысли по этому поводу. Заранее спасибо)
1
|
|
| 12.03.2011, 02:03 | |
|
Ответы с готовыми решениями:
34
Бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой Дано дерево. Распечатать дерево по уровням Ошибка в функции разбора уравнения |
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||||||||||||
| 12.03.2011, 15:21 [ТС] | |||||||||||||||||||||
|
Нашел ошибочку...
Только остается 1 вопрос, который я решить никак не могу... Ну допустим у нас есть дерево и функция insert в нем выглядит след. образом.
3+4*7-5 Имеем при такой вставке __________+ _____3 ______* ___5____- __4 _7 При приоритетах соответственно число - 1, + - 2, * - 3... Следовательно не вариант... Вообщем я немного в ступоре... Что можете подсказать по этому поводу?
0
|
|||||||||||||||||||||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||||||||||||
| 12.03.2011, 16:14 | ||||||||||||
|
Добавлено через 4 минуты если разбор идет слева направо дерево должно получится таким
унарный минус за бортом
1
|
||||||||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 12.03.2011, 19:42 [ТС] | ||||||
|
М... Вот что вышло.
1
|
||||||
| 12.03.2011, 20:49 | |
|
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 13.03.2011, 01:34 [ТС] | |
|
Кстати, еще вопрос. Под парсинг разных вещей нужно будет переделывать код? Универсальность некая впринципе возможна?
Допустим парсим выражения +-*/ или же &| - отличия минимальные?
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 13.03.2011, 01:35 | |
|
В принципе, я думаю, да, ведь как-никак & - эквивалент *, а | - эквивалент +.
1
|
|
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||
| 13.03.2011, 01:50 | ||
|
эти можно сказать эквивалентные (если + - только оставить), но не эквивалентные грамматике с++ например) вообще прикольно было бы тему по грамматикам замутить
1
|
||
| 13.03.2011, 01:53 | |
|
1
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 13.03.2011, 02:00 [ТС] | |
|
alex_x_x, Вообщем лучше все же переписывать я так понимаю, чем пытаться найти корректное и удобное обобщение, быстрее получится переписать...
Про тему по грамматикам - да, было бы очень интересно посмотреть как реализуются разного вида парсеры и создается разного вида грамматика. Не по теме: ЗЫ ты меня про компиляторы позавчера спрашивал, а сам ты пробовал их писать кстати? Просто интересно стало.
0
|
|
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||
| 13.03.2011, 02:04 | ||
|
и стековую машину к нему это было небольшой курсовой была тема пишем интерпретатор, но она кажись не была заточена под теорию
1
|
||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 13.03.2011, 04:11 [ТС] | |
|
alex_x_x, Ну да... Надо модерам клик кинуть будет... fasked-у например.
0
|
|
|
22 / 22 / 2
Регистрация: 06.12.2010
Сообщений: 125
|
||
| 13.03.2011, 11:31 | ||
|
я про это дофига всего прочитала в своё время. для работы использую ANTLR и про него много знаю. но посматриваю в сторону bison и yacc. будет время - поковыряю и их. ANTLR - это LL-парсер (строит дерево сверху вниз), а бизон и як - LR (строят его снизу вверх). а так, я использовала и спирит, и экспрессив. но это уже медленнее и более ограниченно, чем специализированные генераторы парсеров вроде ANTLR, бизона или яка. бустовские библиотеки хороши для парсинга строк и строковых выражений. а вот для алгоритмов с возвратом они тормозят, а иногда и вовсе невозможно что-то реализовать.
1
|
||
|
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
|
|
| 13.03.2011, 16:04 | |
|
Если уж заговорили про генераторы, то стоит еще упомянуть еще о двух генераторах парсеров: Accent, генерирующий парсеры Эрли(правда, генерирует не слишком-то оптимальный код, но вроде как работает, да и проект уже давно затух вроде бы) и Elkhound , использующий GLR( обобщенный LR ) алгоритм, работающий хоть и за O(n^3) в худшем случае, как и Эрли, но зато для однозначных грамматик выходит на O(n), где канонический вариант Эрли справляется за O(n^2), что довольно-таки хорошо в плане производительности.
1
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||||||||||||||||||||||
| 14.03.2011, 03:26 [ТС] | ||||||||||||||||||||||||||
|
Разобрал проект на файлы + разбил нормально функции по классам, чтобы было удобнее разбираться впоследствии.
Код под катом. Tree.h
Token.h
Token.cpp
Sem_Tree.h
Sem_Tree.cpp
3
|
||||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 06.11.2020
Сообщений: 4
|
|
| 19.03.2022, 21:48 | |
|
ForEveR,Привет, спасибо полезно очень, как раз сейчас пишу по такой же теме.
0
|
|
| 19.03.2022, 21:48 | |
|
Помогаю со студенческими работами здесь
35
Получить переменные из строки путём её разбора Программа разбора и вычисления значения арифметического выражения Tools для создания диаграм и разбора кода Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру Напишите программу, которая бы читала дерево в формате (а) и затем печатала бы это дерево в формате (б). Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
|
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера»
Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит.
Придуман Биллом Госпером в 1970-х, опубликован в. . .
|
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb">
<style>
<!]>
</ style>
<g id="bush">
</ g>
</ svg>
function fn(){
let rost;/ / высота древа
let xx=165,yy=210,w=256;
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|