Я в настоящее время разрабатываю и реализую маленький язык программирования как проект дополнительного кредита в уроке, который я посещаю. Моя проблема состоит в том, что язык имеет три числовых типа: Долго, дважды, и Часть. Части могут быть записаны на языке как правильные или неправильные дроби (например, "2 1/3" или "1/2"). Этот факт приводит к проблемам, таким как "2/3.5" (Длинный/Двойной) и "2/3" (Длинный/Длинный) не обрабатываемый правильно лексическим анализатором. Лучшее решение, которое я вижу, состоит в том, чтобы изменить оператор деления. До сих пор я думаю "\", лучшее решение, так как "//" запускает комментарии.
Вы выбрали бы "\" при разработке языка?
Вы выбрали бы что-то еще? Если так, что?
Примечание: изменение путем фракционируется, записаны, не возможно.
Заранее спасибо за Вашу справку,
Править-
Текущие операторы:
**
(питание)
*
(умножиться)
%
(модуль)
+
(добавить)
-
(вычтите и отрицание),
~
(обратная величина)
!
(НЕТ)
>
(больше)
<
(меньше)
>=
(больше-равный)
<=
(менее - равный)
==
(равенство)
<>
(неравенство)
&
(И)
|
(ИЛИ)
^
(XOR)
??
(пустой-указатель-coalesing)
=
(присвоение)
Примечание: Я не нахожусь ни под какими строго обязательными требованиями своего учителя; однако, я в основном убедил его, что мог превратить калькулятор простой дроби на язык. Изменение синтаксиса части шло бы вразрез с синтаксисом дробного калькулятора для частей, которого предпочтительно избегают.
Я не совсем уверен, в чем проблема, поскольку не знаю теории грамматики. Но я бы попробовал изменить правильный синтаксис дробей, например, на 2_1/3
, с подчеркиванием, а не пробелом.
Насчет использования \
в качестве оператора деления - мне бы это точно не понравилось, поскольку он используется практически во всех языках в качестве управляющего символа. Я бы не рекомендовал такую перегрузку значений.
Я думаю, что двухсимвольный / |
- возможная идея. /
- это деление, а |
выглядит как дробь, повернутая на 90 градусов.
Если вы разрешаете квадратные или унарные операторы, я могу порекомендовать вам [2 1/2]
или # 1/2
.
Еще одна причина, по которой не следует использовать \
в качестве замены для /
, заключается в том, что это может вызвать путаницу относительно того, какой операнд - числитель и знаменатель.Например, арифметические операторы MATLAB включают в себя правое деление /
и левое деление \
. Значение 1/2
равно 0,5, а значение 1 \ 2
равно 2. Другими словами, /
имеет числитель слева, а \
имеет числитель справа.
А как насчет того, чтобы требовать, чтобы тип Fraction использовал двойное значение во всех случаях; т.е. 2.0 / 3.5
vs 2 / 3.5
Тогда новый оператор не требуется.
Как насчет того, чтобы сделать дроби основным типом данных? Рассматривать оператор деления как инфиксный конструктор?
Допускаете ли вы в своей грамматике компактные операторы if типа
condition ? trueblocks : falseblocks;
-? Если нет, то вы можете использовать ':' в качестве оператора деления. В конце концов, это стандартный математический символ для деления (вручную, на бумаге) во многих (большинстве?) местах вокруг слова.
Вы можете принять несколько нестандартное соглашение J: %
для деления (потому что это вроде как символ деления) и |
для деления по модулю.
Но тогда вам нужно найти что-нибудь еще для побитового ИЛИ. Возможно, /
?
Я не буду выбирать '\', потому что он менее доступен, чем '/' на клавиатурах. а также более широко используется. так что ваши программисты будут больше чувствовать себя дома.
Я бы избегал \
как сумасшедший, поскольку это сбивает ожидания людей.
Я бы продолжал использовать /
, но вывел бы проблему из лексера в парсер, где с ней будет легче справиться, и вы сможете выдавать разумные сообщения об ошибках.
Если это для класса, я бы просто использовал ключевое слово типа dividedby
. В противном случае вам придется выяснять, что означает /
по контексту. Других подходящих одиночных символов действительно нет.
Однако имейте в виду, что ваш учитель может попросить вас решить контекстную задачу, и в этом случае он хочет, чтобы вы использовали слеш. Я бы спросил.