LINUX.ORG.RU

Приоритет выполнения операций

 


0

1

Пишу парсер выражений реляционной алгебры.

Вводная:

2 * 3 + 4 = 10
2 * (3 + 4) = 14

Теперь представим что вложенность может быть многократной. А мне нужно объяснить компу как с этим работать.

Полагаю, нужно выражения разбить на операции, для каждой указать приоритет выполнения. Но пока не до конца понимаю как.

Что бы мне использовать? (Кроме мозгов :))

Немного теории и паттерн visitor для обхода дерева, если собираешься делать, что-то сложнее чем вычисление.

pon4ik ★★★★★ ()
relation → expr '=' expr

expr → term [('+' | '-') term]*

term → factor [('*' | '/') factor]*

factor → literal | '(' expr ')'

PS. Мог чего-нибудь напутать.

theNamelessOne ★★★★★ ()
Ответ на: комментарий от beastie

Для написания интерпретаторов есть языки и получше.

anonymous ()
Ответ на: комментарий от anonymous

Язык не так важен. Там просто ясно и доходчиво шаг за шагом собирается интерпретатор выдуманного языка с клозурами и почими плюшками. Без BNF, lex и yacc. Для пасинга используется вариация Pratt parser в котором все эти приоритеты выходят просто и не принуждённо сами собой. Да и просто приятная книга почитать. ;)

beastie ★★★★★ ()

Обратная польская нотация - это именно то, что тебе нужно

zamazan4ik ★★ ()
Ответ на: комментарий от i-rinat

О, то что нужно. Я даже изобрёл минималистичный аналог этого алгоритма :)

lochness ()
Ответ на: комментарий от beastie

Читал? Стоит взять? Я просто ленивый и драгон бук неосилил читать тупо из-за ее объема =))

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.