powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Логический калькулятор с упором на битовые операции
3 сообщений из 3, страница 1 из 1
Логический калькулятор с упором на битовые операции
    #36226433
Gordeev_Andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго.
На сегодняшний день в калькуляторе реализован классический набор функций: арифметика, битовые операции, сравнения.
Арифметика целочисленная (два деления mod и div)
Логические операции возвращают (1|0)
Промежуточная форма записи - Обратная Польская Нотация.

БНФ на текущий момент:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<expr>    ::= <expr_3>

<expr_3>  ::= <expr_4> { <oper_3> <expr_4>}
<oper_3>  :=  "=="| "!="| "<" | "<=" | ">" | ">="

<expr_4>  ::= <expr_5> { <oper_4> <expr_5>}
<oper_4>  ::= "+" | "-" | "||" | "|" | "xor" |"^"

<expr_5>  ::= <expr_6> { <oper_5> <expr_6>} 
<oper_5>  ::= "*" | "/" | "%" | "&&"| "&" | ">>" | "<<"

<expr_6>  ::= <operand>   

<operand> ::= <oper_u> <operand> | "(" <expr> ")" | <number>
<oper_u>  ::= "+" | "-" | "!" | "~"
<number>  ::= <digit> { <digit> }
<digit>   ::= "0" | .. | "9"

Теперь хочу добавить лаконичности для проверки бит.
Запись "{1,3..5}" -- эквивалент для "(1<<1 | 1<<3 | 1<<4 | 1<<5)"

Вопрос: куда и как этот синтаксис впихнуть в существующую грамматику?
...
Рейтинг: 0 / 0
Логический калькулятор с упором на битовые операции
    #36226637
Gordeev_Andry,

это просто другая форма представления числа. в number "впихивайте"
...
Рейтинг: 0 / 0
Логический калькулятор с упором на битовые операции
    #36227320
Gordeev_Andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значит получается примерно так:
Код: plaintext
1.
2.
3.
4.
// число может быть задано либо "классически" либо "через поднятие бит"
<number>  ::= <digit> { <digit> } | <bit_mask>

// Запись числа "через поднятие бит"  ( { 1 , 2 .. 4 } ==  31  ) 
<bit_mask>::= "{" [ <digit> { "," | ".." <digit> } ] "}"
Сижу и думаю, а может так:
Код: plaintext
1.
2.
// Запись числа "через поднятие бит"  ( { 1 , 2 .. 4 } ==  31  ) 
// Номера бит можно указывать и через выражения
<bit_mask>::= "{" [ <expr> { "," | ".." <expr> } ] "}"
Но нужно ли оно? Ведь в данном случае значение выражения не должно вылазить за пределы разрядности числа.
Да и ума не приложу, как научить "вычислитель" это быстро подсчитывать.
Наверное, пока это будут "только числа".

Ещё вопрос. Часто будут записываться выражения:
Код: plaintext
1.
2.
3.
(A & B) == B
(A & B) !=  0 
(A | B) !=  0 
и т.д., где A и B - выражения.
Предложите, пжлст, синтаксис для более лаконичной записи данных выражений, дабы не дублировать B, да и покрасивей.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Логический калькулятор с упором на битовые операции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]