シンプルな命令型言語のために、haskellにインタプリタを書いてみたいと思います。 これを行うには、まずBNFCツール(http://bnfc.digitalgrammars.com/)用の言語の文章を書いた。それだけ、私はBNFCツールを実行し、提供されたスクリプトでそれをテストすることができます持つBNFCで生成された文法が最も単純な例で失敗する
EAdd. Expr ::= Expr "+" Expr ;
EMinus. Expr ::= Expr "-" Expr ;
EMul. Expr ::= Expr "*" Expr ;
ENum. Expr ::= Integer ;
:その文法の
パートは、次のような表現を、算術専用されています。これは、算術演算を正常に解析します。私は別のセクション(さんがタイプと言わせて)追加した場合
しかし、:
Tint. Type ::= "int" ;
をそして、式exprのsecionを入れて、算術演算は、もはや1 + 2にテストする場合には、解析に失敗しました「と言う(パースません。 .. [いくつかのトークンはここにある] 1 + 2の前の1行目の構文エラー "
どうしてですか?それを修正するには?
は言い直すするには、次の
なgramarを理由:
TInt. Type ::= "int" ;
EAdd. Expr ::= Expr "+" Expr ;
ENum. Expr ::= Integer ;
正しく解析しません1 + 1
をbnfc使用して?