我目前正在设计和实现一种小型编程语言作为我正在上课的额外学分项目。我的问题是该语言有三种数字类型:Long,Double和Fraction。分数可以用适当或不适当的分数(例如“2 1/3”或“1/2”)写成。这个事实导致诸如“2 / 3.5”(长/双)和“2/3”(长/长)等问题无法被词法分析器正确处理。我看到的最佳解决方案是更改除法运算符。到目前为止,我认为“\”是最好的解决方案,因为“//”开始评论。
如果你正在设计语言,你会选择“\”吗?
你会选择别的东西吗?如果是这样,什么?
注意:无法更改分数的写入方式。
先谢谢你的帮助,
- 编辑 -
目前的运营商是:
**
(权力)
*
(相乘)
%
(模数)
+
(添加)
-
(减去和否定)
~
(互惠)
!
(不是)
>
(更大)
<
(减去)
>=
(大于等于)
<=
(不太相等)
==
(平等)
<>
(不平等)
&
(AND)
|
(或)
^
(XOR)
??
(null-coalesing)
=
(作业)
注意:我的老师没有严格的约束要求;但是,我基本上让他相信我可以将一个简单的分数计算器变成一种语言。更改分数的语法将违反分数计算器的分数语法,最好避免使用。
答案 0 :(得分:9)
APL答案是÷。我认为这是可识别的。
答案 1 :(得分:7)
你是否允许使用紧凑的if语句,如
condition ? trueblocks : falseblocks;
你的语法?如果没有,您可以使用“:”作为分区运算符。毕竟,在这个词的许多(大多数?)地方划分(手工,纸上)的标准数学符号。
答案 2 :(得分:6)
单词“div”怎么样?
答案 3 :(得分:5)
我不太确定是什么问题,因为我不懂语法理论。但我会尝试更改适当的分数语法,例如到2_1/3
,用下划线而不是空格。
关于使用\
作为除法运算符 - 我当然不会喜欢它,因为它在每种语言中用作转义字符。我不会推荐这种含义超载。
答案 4 :(得分:3)
避免使用\
替换/
的另一个原因是,它可能会导致混淆哪个操作数是分子,哪个是分母。例如,MATLAB arithmetic operators包括右分区/
和左分区\
。 1/2
的值为0.5,但1\2
的值为2.换句话说,/
左侧有分子,\
上有分子右。
答案 5 :(得分:1)
如果是某个课程,我只会使用像dividedby
这样的关键字。否则你将不得不弄清楚/
在其背景下的含义。确实没有其他单一字符适合。
但请注意,您的老师可能会要求您解决上下文问题,在这种情况下,他希望您使用斜杠。我会问。
答案 6 :(得分:1)
要求Fraction类型在所有情况下都使用double;即,2.0 / 3.5
vs 2 / 3.5
然后不需要新的操作员。
答案 7 :(得分:1)
你可以采用J有点非标准的%
约定来划分(因为它看起来像是除法符号)和|
用于模数。
但是你必须为bitwise或者找到别的东西。也许是/
?
答案 8 :(得分:1)
我会避免\
像疯了一样,因为它会让人们的期望感到困惑。
我会继续使用/
但是从词法分析器中解决问题并进入解析器,它将更容易处理,并且您可以发出合理的错误消息。
答案 9 :(得分:1)
我认为两个字符/|
是一个可能的想法。 /
是分区,|
看起来像是旋转了90度。
如果您允许括号或一元操作符,我可以向您推荐[2 1/2]
或#1/2
。
答案 10 :(得分:1)
如何将分数作为主要数据类型?将除法运算符视为中缀构造函数?
答案 11 :(得分:0)
我不会选择'\',因为它比键盘中的'/'更难以访问。而且,它被更广泛地使用。所以你的程序员会更多地回家。