>>298
なぜか偶然ですが、このスレを見る前から昨日からその辺に関係するパーサーを
作っていて悩んでいたところなんですが、
多くの言語では、+,-,*,/,<,> などの演算子が混ざったいわゆる「数式」は文脈に依存せずに
上位のコンパイル作業に入る前に、いったん「数式ツリー」に直すことが出来ます。
ここで「文脈に依存せず」というのは、変数名、関数名、型名などの宣言情報を
調べなくても済むという(いわゆる意味解析の結果の情報を必要としないと言う
)ことです。
ところが、template機能が入った後のC++では、A<B と書いたとき、
< がテンプレートの記号なのか比較演算子なのかは A がテンプレート名であるか
どうかによって決まります。
Bが型名であることが明確な場合には文脈によらず < はテンプレート記号だと断定
できます。ところが、Bに 1, 456, 3.1415 のような数値や、"Hello" などの文字列
が来ている場合には、(その場では)判断が付きません。
文脈に依存せずに判断を付けたいなら、もっと先まで呼んで、< に対応する >
があるかどうかを調べるといける可能性があります。
1. "<"に対応する">"が存在するかどうか調べれば、これまでの宣言情報を使わなくても
トークン・ツリーを作ることが出来る。トークン・ツリーと言ったのは、数式とは
限らないからです。例えば、A<B> x[100]; などとすることがありますが、A<B>
は型名であり、数式では有りません。ただし、他の多くの言語では数式ツリーは
作ることが多いのですが、トークン・ツリーはまず作りません。
2. 1の方法を使わないなら、宣言情報を調べて、Aがtemplate名であるかどうかを調べる
必要がある。ところが、Q::A<B> などのような場合があるので、そんなに
単純な作業でく、Q::A が型名なのか、変数名なのかはちゃんと調べる必要がある。
探検
C++相談室 part145
■ このスレッドは過去ログ倉庫に格納されています
308デフォルトの名無しさん
2019/10/04(金) 08:20:48.47ID:FzFdUbJu■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★6 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 【野球】野球の未来に危機感「マイナースポーツになる」 宮本慎也氏が開催…学童大会 [尺アジ★]
- 中国「捜索レーダー起動は各国の通常の手法」 火器管制用か回答せず [蚤の市★]
- 【訃報】声優・西村知道さん死去 「SLAM DUNK」安西先生役 9月に体調不良のため一時休業 [少考さん★]
- (´・ω・`)刑務所での暮らしwwwwwwwwwwwwwwww
- ぺこーら、地震で同僚が次々配信を止めるなか強行し続けるので悪目立ちするwww [268244553]
- なぜ人間は架空の人物に感情移入するのか
- 【愛国者速報】山上徹也、金に困りTwitterのお金配り垢に応募していた。犯行もお金があったら暫くやらなかったと供述 [856698234]
- 年々クリスマス感が無くなってる
- 【速報】高市早苗、起床 [779938112]
