2016-05-03 5 views
0

シンプルな命令型言語のために、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使用して?

答えて

0

entrypoint宣言がない場合、bnfcは文法で定義された最初のカテゴリをテストスクリプトのエントリポイントとして使用します。

I.e.ファイルの先頭にTint. Type ::= "int" ;を追加すると、bnfcによって生成されたスクリプトは、Exprではなく、Typeを解析しようとします。

関連する問題