問題タブ [fsyacc]
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.
f# - この fsyacc 入力がコンパイルしない F# を生成するのはなぜですか?
私の fsyacc コードは、変数が見つからないというコンパイラ エラーを出していますが、その理由がわかりません。誰かが問題を指摘してくれることを望んでいました。
ライン | NAME {Conc($1)} と次の行の両方でこのエラーが発生します。
構文の問題は理解できましたが、yacc 入力の何が問題なのですか?
それが役立つ場合は、Ast の定義を次に示します。
そして fslex 入力:
parsing - 引用符なしで文字列をキャプチャする方法
引用符なしで引用符付きの文字列をキャプチャしようとしています。私はこの端末を持っています
そしてこのプロダクション
これらのレクサー規則とともに
a に至るまでのすべてを、QUOTE
解析しない単一の語彙素として解釈しているようです。したがって、私の問題は文法のどこかにあるのかもしれません-よくわかりません. 私はこれを正しい方法で行っていますか?文字列から引用符を除外しようとする前は、問題なく解析されていました。
アップデート
次のレクサー規則にはあいまいさがあると思います
次のルールは、STRING
STRING
正規表現に引用符を含めずにこれらを明確にする方法はありますか?
parsing - バイナリ操作のシフト/削減エラーの排除
fsyaccは、すべてのバイナリ操作に対してshift/reduceエラーを発行しています。
私はこの再帰的なプロダクションを持っています:
に変更する
エラーを排除します(しかし、私が望むものではありません)。優先順位と結合性は次のように定義されます。
これは、エラーを生成する状態を示すリストファイルからの抜粋です(他の1つの状態にも同じエラーがあります)。
すべての場合でパーサーのシフトを確認できますが、これは正しいと思います。少なくとも、動作が正しくないケースは見つかりませんでした。
これらのエラーを排除するために文法を言い換えるにはどうすればよいですか?
visual-studio-2010 - Visual Studio でビルドするときの fsyacc エラー
Visual Studio 内で fsyacc を使用しています (Parsed Language Starter テンプレートを使用) が、ビルド出力にはエラーが発生した行/列が表示されません (のみ: fsyacc はコード 1 で終了しました)。この情報を取得するには、コマンド プロンプトからビルドする必要があり、VS 統合の利点が多少損なわれます。
これを出力ウィンドウに表示する方法はありますか?
編集
出力ウィンドウに表示されないエラーの例を次に示します。
と
これも見たいと思う成功の出力です:
f# - FS0035の取得=>コンストラクトは非推奨です
fsyaccベースのプロジェクトでは、次の行があります。
これは私が得ている完全なエラーの説明です:
CALast.fs(117,9):エラーFS0035:この構造は非推奨です:この型の省略形には、省略されている型に表示されない1つ以上の宣言された型パラメーターがあります。タイプの省略形は、省略されるタイプで宣言されたすべてのタイプパラメーターを使用する必要があります。1つ以上の型パラメーターを削除するか、「type C <'a> = Cof...」などの基になる型をラップする具象型定義を使用することを検討してください。
これを解決する方法はありますか?
f# - FSlex/FSyaccのクラッシュ-FSharp.Coreアセンブリが見つかりません
マシンでFSlex/FSyaccがクラッシュする問題が発生しています。
コンテキストでは、これは、Parallels仮想マシン内で実行されているWindows 8 Consumer Preview(32ビット)で実行されているVisualStudio11ベータ内にあります。
------ビルド開始:プロジェクト:基本、構成:任意のCPUのデバッグ------ C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(1546,5):警告MSB3245:この参照を解決できませんでした。アセンブリ"log4net、Version = 1.2.11.0、Culture = neutral、PublicKeyToken=669e0ddf0bb1aa2a"が見つかりませんでした。アセンブリがディスク上に存在することを確認してください。この参照がコードで必要な場合、コンパイルエラーが発生する可能性があります。ベーシス->C:\ Users \ nexus \ Desktop \ Static \ trunk \ Static \ Basis \ bin \ Debug \ Basis.dll ------ビルド開始:プロジェクト:構文、構成:任意のCPUのデバッグ----- --cd C:\ Users \ nexus \ Desktop \ Static \ trunk \ Static \ Syntax \ CALL C:\ Users \ nexus \ Desktop \ Static \ trunk \ Static \ Syntax \ fsyacc.cmd CALL C:\ Users \ nexus \ Desktop \ Statical \ trunk \ Static \ Syntax \fslex.cmdfsyacc.cmdを実行しています...CalParser。fsp実行中のfsyacc.exe...未処理の例外:System.IO.FileNotFoundException:ファイルまたはアセンブリ'FSharp.Core、Version = 2.0.0.0、Culture = neutral、PublicKeyToken=b03f5f7f11d50a3a'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。ファイル名:'FSharp.Core、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a'
。$FSharp.PowerPack.FsYacc.Driver.main@()WRN:アセンブリバインディングログがオフになっています。アセンブリバインドの失敗のログを有効にするには、レジストリ値[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)を1に設定します。注:アセンブリのバインドの失敗のログには、パフォーマンスの低下があります。この機能をオフにするには、レジストリ値[HKLM \ Software \ Microsoft \ Fusion!EnableLog]を削除します。fslex.cmdを実行しています...CalLexer.fsがCalLexer.fslC:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(1036,5)よりも新しいためfslex.exeを実行していません:エラーMSB3073 :コマンド "cd C:\ Users \ nexus \ Desktop \ Static \ trunk \ Static \ Syntax \ CALL C:\ Users \ nexus \ Desktop \ Static \ trunk \ Static \ Syntax \ fsyacc.cmd CALL C:\ Users \ nexus \ Desktop \ Static \ trunk \ Static \ Syntax\fslex.cmd"がコード-532459699で終了しました。
関連する部分はこれのようです:
未処理の例外:System.IO.FileNotFoundException:ファイルまたはアセンブリ'FSharp.Core、Version = 2.0.0.0、Culture = neutral、PublicKeyToken=b03f5f7f11d50a3a'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。ファイル名:'FSharp.Core、Version = 2.0.0.0、Culture = neutral、PublicKeyToken =b03f5f7f11d50a3a'at
。$FSharp.PowerPack.FsYacc.Driver.main@()
FSharp.Coreアセンブリが見つからない理由がわかりません。
アイデア?
parsing - F# FsYacc での解析中にカスタム コンテキスト パラメータを追加して使用する方法は?
F# アプリケーションでの文字列解析にFsLexとFsYaccを使用しています。抽象構文ツリー (AST) の作成中に、パーサーは AST の作成方法を決定する必要があります (異なるツリーを作成する、例外をスローするなど)。パーサーの動作は、いくつかのパラメーターに依存する必要があります。
ここで、次のような宣言が許可されていることがわかりました。
しかし、この構造を使用する方法を見つけることができず、プロジェクトのコンパイル中に"fsyacc.exe" がコード 1 で終了しました。"エラー
質問は次のとおりです: FsYacc での解析中にコンテキストパラメーターを使用することは可能ですか?
私が試したことの例:
そして、私は次のような使用法を期待していました:
前もって感謝します
次の例外を更新し、fsyacc.exe の実行中にコール スタックが生成されます。
parsing - F# での字句解析と解析の同時実行
fslex と fsyacc を使用しているときに、字句解析と解析を同時に実行する簡単な方法はありますか?
parsing - fsyacc パーサーにパラメーターを渡すことはできますか?
パラメータをレクサーに渡すことができることを知っています:
しかし、同様の方法でパーサー開始シンボルを定義することはできません。
私はそれを次のように定義しようとしました:(この質問のおかげで)
しかし、このようにすべての非終端記号を定義する必要があり、それらはすべてラムダを返します。scope
これは私が達成しようとしているものではありませんが、いくつかの非端末内でパラメーターにアクセスし、解析中にそれらのアクションを実行できるようにしたいと考えています。
のみを含むIParseStateタイプに があることに気付きましたParserLocalStore
(デバッグによってのみチェックされます)。私はすべての非ターミナルからアクセスできるので、そこにパラメータを保存できますか、それとも悪い考えでしょうか?LexBuffer
parseState
パーサーの head セクションで変更可能な変数を使用することを考えましたが、それらは静的であり (私が思うに?)、複数の入力を同時に解析することはできません...
編集:
scope
現在、特定のトークンにパラメーターを保存します。
レキサーは、トークンをscope
作成するときに関連するトークンにそれを埋め込みます... 私はこの解決策が本当に好きではありませんが、まだより良いものを思いつくことができませんでした.
f# - F#整数ファイルディレクティブ
私はfslexとfsyaccを使用してきましたが、F#ソースファイル(.fs
レクサー(.fsl
)とパーサー(.fsp
)のルールから生成されます)は、このようなステートメントであらゆる場所で元.fsl
の(場合によっては同じソースファイルを参照します).fs
番号は行番号です):
また、.fs
によって生成されたファイルpars.fsp
も同じようなことをしますが、それと一緒に生成されたF#署名ファイル(.fsi
)への参照が追加されます。これはどういう意味ですか?