1.次のように構文文法G [E]です。
-E→E + T | ET | T
-T→T * F | T / F | F
-F→P ^ F | P
-P→(E)| 私
- 要件は、意味論的に記述された属性文法解析を構築要件
ソリューション:
E - > E + T {E.place:= newtempを。EMIT(E.place、 ':='、E.place、 '+'、T.place)}
E - > ET {E.place:= newtempを。EMIT(E.place、 ':='、E.place、 ' - '、T.place)}
E - > T {E.place:= newtempを。EMIT(E.place、 ':='、T.place)}
T - > T * F {T.place:= newtempを。EMIT(T.place、 ':='、T.place、 '*'、F.place)}
T - > T / F {T.place:= newtempを。EMIT(T.place、 ':='、T.place、 '/'、F.place)}
T - > F {T.place:= newtempを。EMIT(T.place、 ':='、F.place)}
F - > P ^ F {F.place:= newtempを。EMIT(F.place、 ':='、P.place、 '^'、F.place)}
F - > P {P.place:= newtempを。EMIT(F.place、 ':='、P.place)}
P - >(E){P.place:= E.place;}
P - > I {どうか<>ゼロ次いで発する(P.place、 ':='、i.place)他のエラー}
2.(オプション)第三の実験:構文、セマンティクス翻訳
要件:
- オペレータの優先構文指向翻訳プロセスによって、上記の式の文法解析を達成するために。
- 意味解析プログラムの設計上の第二の実験(演算子優先構文解析)が完了します。
- 最終的な出力は、テストクォータニオン中間コード配列に相当します。
として
入力:+ B * C、出力
(*、B、C、T1)
(+、T1、T2)
入力:B *(C + B)* D、出力
(*、B、C、T1)
(*、B、D、T2)
(+、T1、T2、T3)