Какой символ оператора деления вы бы выбрали? - PullRequest
8 голосов
/ 30 апреля 2010

В настоящее время я занимаюсь разработкой и реализацией небольшого языка программирования в качестве внекредитного проекта в классе, который я посещаю. Моя проблема в том, что язык имеет три числовых типа: Long, Double и Fraction. Дроби могут быть написаны на языке как правильные или неправильные дроби (например, «2 1/3» или «1/2»). Этот факт приводит к тому, что лексер неправильно обрабатывает такие проблемы, как «2 / 3,5» (длинный / двойной) и «2/3» (длинный / длинный). Лучшее решение, которое я вижу, - это смена оператора деления. Пока что я думаю, что "\" - лучшее решение, так как "//" начинает комментарии.

Вы бы выбрали "\", если бы разрабатывали язык?

Вы бы выбрали что-нибудь еще? Если да, то?

Примечание: изменение способа записи дробей невозможно.

Заранее спасибо за помощь,

-EDIT-

Текущие операторы:

** (мощность)

* (умножить)

% (модуль)

+ (добавить)

- (вычитание и отрицание)

~ (взаимно)

! (НЕ)

> (больше)

< (меньше)

>= (больше-равно)

<= (менее равно)

== (равенство)

<> (неравенство)

& (И)

| (ИЛИ)

^ (XOR)

?? (без объединения)

= (назначение)

Примечание: мой учитель не предъявляет никаких строго обязательных требований; Тем не менее, я в основном убедил его, что я могу превратить простой калькулятор фракций в язык. Изменение синтаксиса дроби идет вразрез с синтаксисом калькулятора дробей для дробей, которого желательно избегать.

Ответы [ 12 ]

9 голосов
/ 30 апреля 2010

Ответ APL - & div ;. Я думаю, что это узнаваемо.

7 голосов
/ 30 апреля 2010

Вы разрешаете сжатие, если такие утверждения, как

condition ? trueblocks : falseblocks;

в вашей грамматике? Если нет, вы можете использовать ': ' в качестве оператора деления. В конце концов, это стандартный математический символ для деления (от руки, на бумаге) во многих (большинстве?) Местах вокруг слова.

6 голосов
/ 30 апреля 2010

Как насчет слова "div"?

5 голосов
/ 30 апреля 2010

Я не совсем уверен, в чем проблема, так как я не знаю теории грамматики. Но я бы попытался изменить правильный синтаксис дроби, например, до 2_1/3, с подчеркиванием, а не пробелом.

Об использовании \ в качестве оператора деления - мне, конечно, это не понравится, поскольку оно используется почти на каждом языке в качестве символа перехода. Я бы не рекомендовал такой перегрузки значений.

3 голосов
/ 30 апреля 2010

Другая причина, по которой следует избегать использования \ в качестве замены /, заключается в том, что это может привести к путанице в отношении того, какой операнд является числителем, а какой - знаменателем. Например, арифметические операторы MATLAB включают как правое деление / , так и левое деление \. Значение 1/2 равно 0,5, но значение 1\2 равно 2. Другими словами, / имеет числитель слева, а \ - числитель справа.

1 голос
/ 30 апреля 2010

Как насчет того, чтобы сделать дроби основным типом данных?Думаете об операторе деления как инфиксном конструкторе?

1 голос
/ 30 апреля 2010

Я думаю, что двухсимвольный /| является возможной идеей. / - это деление, а | выглядит как дробь, повернутая на 90 градусов.

Если вы разрешите скобочные или унарные операторы, я бы порекомендовал вам [2 1/2] или #1/2.

1 голос
/ 30 апреля 2010

Я бы избегал \ как сумасшедший, потому что это могло бы смешать ожидания людей.

Я бы пошел дальше и использовал /, но вытащил проблему из лексера в парсер, где с ней будет легче иметь дело, и вы сможете выдавать разумные сообщения об ошибках.

1 голос
/ 30 апреля 2010

Вы можете принять несколько нестандартное соглашение J: % для деления (потому что оно выглядит как символ деления) и | для модуля

Но тогда вам нужно найти что-то еще для побитового или. Возможно /?

1 голос
/ 30 апреля 2010

Как насчет требования типа Fraction использовать double во всех случаях; то есть 2.0 / 3.5 против 2 / 3.5 Тогда новый оператор не требуется.

...