LINUX.ORG.RU

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

 


0

1

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

Вводная:

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

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

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

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

Ответ на: комментарий от pon4ik

Ох, мать...

Похоже, это мне поможет. Спасибо.

lochness
() автор топика
relation → expr '=' expr

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

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

factor → literal | '(' expr ')'

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

theNamelessOne ★★★★★
()

юзай стек

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

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

beastie ★★★★★
()

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

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

Спасибо, как раз на этом язычке и пишу.

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

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

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

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

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