8

I am currently designing and implementing a small programming language as an extra-credit project in a class I'm taking. My problem is that the language has three numeric types: Long, Double, and Fraction. Fractions can be written in the language as proper or improper fractions (e.g. "2 1/3" or "1/2"). This fact leads to problems such as "2/3.5" (Long/Double) and "2/3"(Long/Long) not being handled correctly by the lexer.The best solution that I see is to change the division operator. So far, I think "\" is the best solution since "//" starts comments.

Would you pick "\", if you were designing the language?

Would you pick something else? If so, what?

Note: changing the way fractions are written is not possible.

Thanks in advance for your help,

-EDIT-

Current operators are:

** (power)

* (multiply)

% (modulus)

+ (add)

- (subtract and negation)

~ (reciprocal)

! (NOT)

> (greater)

< (less)

>= (greater-equal)

<= (less-equal)

== (equality)

<> (inequality)

& (AND)

| (OR)

^ (XOR)

?? (null-coalesing)

= (assignment)

Note: I am under no strictly binding demands by my teacher; however, I basically convinced him that I could turn a simple fraction calculator into a language. Changing the fraction's syntax would go against the fraction calculator's syntax for fractions, which is preferably avoided.

4

12 に答える 12

9

APLの答えは÷です。それは認識できると思います。

于 2010-04-30T01:50:17.670 に答える
6

次のようなコンパクトなifステートメントを許可していますか

condition ? trueblocks : falseblocks;

あなたの文法では?そうでない場合は、除算演算子として「 : 」を使用できます。それは結局、単語の周りの多くの (ほとんどの?) 場所で (手で、紙の上で) 除算の標準的な数学記号です。

于 2010-04-30T00:10:11.530 に答える
6

「div」という言葉はどうですか?

于 2010-04-29T23:17:31.930 に答える
5

文法理論がわからないので、何が問題なのかよくわかりません。2_1/3しかし、スペースではなくアンダースコアを使用して、適切な分数構文を に変更してみます。

除算演算子としての使用について\— ほぼすべての言語でエスケープ文字として使用されているため、私はそれが好きではありません。このような意味の過負荷はお勧めしません。

于 2010-04-29T23:17:02.187 に答える
3

\の代わりに使用することを避けるもう 1 つの理由/は、どのオペランドが分子でどちらが分母であるかについて混乱を招く可能性があるためです。たとえば、MATLAB の算術演算子には、右除算/ 左除算の両方が含まれます\。の値1/2は 0.5 ですが、 の値1\2は 2 です。つまり、/の左側に\分子があり、右側に分子があります。

于 2010-04-30T02:32:53.903 に答える
1

2文字/|は考えられるアイデアだと思います。/は分割であり、|分数が90度回転したように見えます。

角かっこまたは単項演算子を許可する場合は、またはをお勧めし[2 1/2]ます#1/2

于 2010-04-30T00:46:03.900 に答える
1

分数を主要なデータ型にするのはどうですか? 除算演算子を中置コンストラクターと考えていますか?

于 2010-04-30T01:32:24.693 に答える
1

すべての場合に double を使用するように Fraction 型を要求するのはどうですか。つまり、2.0 / 3.5vs 2 / 3.5。新しい演算子は必要ありません。

于 2010-04-29T23:20:31.540 に答える
1

%除算 (除算記号のように見えるため) と|モジュロに対して、 J のやや非標準的な規則を採用することができます。

ただし、ビットごとの OR については別のものを見つける必要があります。おそらく/

于 2010-04-29T23:22:49.627 に答える
1

\人々の期待を混乱させるので、私は狂ったように避けたいと思います.

私は先に進んで使用します/が、問題をレクサーからパーサーに移すと、対処が容易になり、適切なエラーメッセージを発行できます。

于 2010-04-30T00:13:43.937 に答える
1

クラスの場合は、 のようなキーワードを使用しdividedbyます。/それ以外の場合は、コンテキストによってその意味を理解する必要があります。他に適した単一のキャラクターは本当にありません。

ただし、教師が文脈上の問​​題を解決するように求めている可能性があることに注意してください。その場合、教師はスラッシュを使用することを望んでいます。私は尋ねます。

于 2010-04-29T23:17:53.760 に答える
0

「\」はキーボードの「/」よりもアクセスしにくいため、選択しません。また、より広く使用されています。そのため、プログラマーはより家にいるようになります。

于 2010-04-29T23:24:47.360 に答える