問題タブ [bnfc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
parsing - BNFCパーサーとブラケットMathematicaのような構文
私はBNFコンバーターで少し遊んで、 Mathematica言語の一部を再設計しようとしました。私のBNFにはすでに約150行あり、非常に基本的なバグに気付くまでは問題なく動作していました。Mathematicaの括弧[]
は2つの異なる目的で使用されます
expr[arg]
関数を呼び出すlist[[spec]]
式の要素にアクセスするには、たとえばList
識別子、関数呼び出し、要素アクセス、および引数としての式のシーケンスのみで構成される言語のパーサーを作成するとします。これらのフォームは有効です
BNFCの直接の、しかし明らかに間違った入力ファイルは、次のようになります。
このBNFは、最初のコードブロックの最後の2つの例では機能しません。
問題は、作成されたYylex
レクサーファイルにあるようです。このファイルは、個別に一致]
し]]
ます。これは間違っています。最後の例でわかるように、それが終了であるかどうか、または]
コンテキスト]]
に依存するかどうかです。したがって、正しい一致を保証するために中括弧のスタックを作成するか、それをパーサーに任せる必要があります。
BNFCでこれを実現できるかどうか誰かに教えてもらえますか?
(ところで、他のヒントもありがたいことに取られるでしょう)
bnf - bnf コンバーターでのフィッティング順序
bnf コンバーターのルールの優先順位に問題があります。ここでいくつかのルールをコピーします
私はサンプルプログラムを書きます:
その結果、p(i) が CParams [VarCParam (Ident "i")] に変換されることを期待していますが、CParams [BExpCParam (BVar (Ident "i"))] に変換されます。
このバグを修正するためにルールを変更する方法を教えてください
grammar - BNFC 文法での優先レベルの設定
バックグラウンド:
私はソフトウェアセマンティクスのクラスを取っています.while と呼ばれるおもちゃの言語用の小さなコンパイラとランタイムを作成することになっています. Java のコード スケルトンが与えられましたが、好きな言語を使用することが許可されています。私はこれを文法のリハーサルの機会と考え、代わりに C++ でラボを行うのはクールだと考えました。
現在、ステートメントの優先順位ルールを設定する際に問題が発生しています。これが現在の私のBNFC文法ファイルです。
私が欲しいのは入力です
私の複合ルールに従って次のようなものに解析されます
つまり、割り当てをループ本体の一部にしないでください。しかし、私が得るのは
ご覧のとおり、while ループの本体は複合ステートメントで構成されていますが、これは私が望んでいたものではありません。この効果を得るには、優先ルールをどのように設定すればよいですか?
regex - BNFC で空白を使用する方法はありますか?
BNFC定義で空白をどのように使用しますか?
たとえば、変数のリストを抽象化できるラムダ計算用のパーサーを作成したいとします。
「明らかな」ことは、次のようなラベル付きルールを使用することです。
ただし、BNFC はデフォルトで空白を削除するため、機能しません。機能するのは、コンマ区切りを使用することです。少し醜いですが、私はそれで暮らすことができました... それでも、スペースで区切ることができるといいでしょう.
BNFC に空白文字クラスはありますか?
compiler-construction - 構文指示変換のための BNFC の内部ルール?
BNFC では、「内部」ルールを使用して、構文による変換を支援できます。彼らが与える標準的な例は、型注釈用です
これにより、AST の新しい部分が得られます。
これはうまくいきます!ただし、後で使用するプレースホルダーとして任意の型をそこに置くことができれば、本当に素晴らしいことです。
そして、パラメトリックデータ型を生成します
次に、これを型 (型チェッカーの場合) またはコード セグメント (コード生成の場合) で埋めることができます。
java - java_cup を段階的に使用する方法は?
私は java_cup と解析がまったく初めてで、bnfc と javacup を使用して単純な文法のパーサーを生成したいと考えています。文法規則を指定し、bnfc を使用しました。
いくつかのファイルを生成しました(つまり、filename.cup)
それから私はjava_cupでそれを構築しようとしました:
こちらも無事終了。最後に、ファイル parser.java と sym.java を取得しました。
解析するかどうかを確認したい入力ファイルがいくつかあります。この生成されたパーサーの使用方法がわかりません。parser.java もコンパイルしましたが、実行しようとするとスローされます
haskell - cabal install bnfc 不足しているディレクトリ
Haskell は初めてで、コンパイラ構築クラスのプログラムを作成しようとしています。
ubuntu 13.10 に haskell-platform パッケージをインストールし、(haskell プラットフォームのインストール後に何もいじらずに) 次のコマンドを実行しようとしました。
結果は次のとおりです。
パッケージディレクトリをインストールしようとすると、パッケージは既にインストールされていると表示されます。誰でも助けることができますか?
c++ - 簡単な C++ プログラム例の BNF 文法
だから私は単純な C++ プログラムの文法を書こうとしています。
現在の文法は次のようになります。
これは、解析する必要がある単純な C++ プログラムです。
そのため、解析しようとすると、std::cout 行を意味する 6 行目にエラーが表示されます。私はbnfが初めてなので、これを解決するために「考える」方法がわかりません。誰かがこのような状況を解決する方法の例を挙げることができれば素晴らしいでしょう.!
ありがとうございました!