コンパイラの理論:構文セマンティクス翻訳

1.次のように構文文法G [E]です。 

  E→E + T | ET | T 

  T→T * F | T / F | F 

  F→P ^ F | P 

  P→(E)| 私 

  • 構築物は、前記意味的属性文法分析要件(主に4元ライト部分を生成する)に記載しました。

 解像度:

  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 {Epを、エース:= newtempを。EMIT(E.place、 ':='、 'UMINUS'、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、 '; ='、 'UMINUS'、F.place)}

  F - > P ^ F {F.place:=newtemp。EMIT(F.place、 ':='、P.place '^'、F.place)}

  F - > P {F.place:=newtemp。EMIT(F.place、 ':='、 'UMINUS'、P.palce)}

  P - >(E){P.place:=E.palce;}

  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)

おすすめ

転載: www.cnblogs.com/zhif97/p/12094740.html