問題タブ [fslex]
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# - F# fslex fsyacc は製品コード用に成熟していますか?
fslex/fsyacc、バギー、遅い、愚かなどを実際にリッピングしている 2 年前の Web ページを読んだ後、OCamel の対応するものと比較して、構文解析の必要性をレクシングするための最善の策は何だろうか?
以前は C# バインディングで ANTLR を使用していましたが、現在 F# を学習中であり、パーサー ジェネレーターが付属しているのを見て興奮しました。F# は現在正式にリリースされており、Microsoft が実際にサポートと開発を目指しているようです。fslex と fsyacc は製品コードにとって価値があると思いますか?
f# - FsLex-2つの文字列の違い
私はいくつかのトークンを持っています:
PNAME
およびENAME
-両方とも文字列です。
次に、これらのトークンを一致させるために、レクサーに2つのルールを設定します。
PNAME
文字列が文字azとオプションの特殊文字@/()で構成されている場合、最初のルール( )は一致する必要があります。
2番目のルール(ENAME
)は、文字列が文字azとオプションのプレフィックス(#/。)で構成されている場合に一致する必要があります。
ENAME
さて、プレフィックスがない場合でも、一致するだけのルールをレクサーファイルでどのように作成しますか?
違いが生じる場合は、次のような文字列ENAME
の後にアフターがあります。-ただし、このブラケットをパーサーに渡さないでください...{
(prefix)eName {
助言がありますか?
f# - fsyacc/fslex と FParsec のどちらを選択しますか?
次のような単純な DSL 言語を解析する必要があります。
この種の言語を解析するのに最も適したツールは何ですか?
f# - FsLex でネストされたコメントを処理する方法
C のように、1 行と複数行のコメントを使用できます。
次のように、すべてのコメントを無視するためのレクサーのルールを記述する方法。
またはこれらのように:
更新:
ネストされたコメントを解析する有効なコードは次のとおりです ( Samに感謝します):
f# - Fslex、バイナリ ファイルの字句解析
Fslex を使用してバイナリ ファイル形式 (jpeg 画像など) を語彙化する機能はありますか (可読性が損なわれることはありません)。
f# - ワークフローまたはfsYaccを使用する必要がありますか?
.Netプラットフォームで解析する必要のある非常に単純なDSLがあります。パーサーの経験があまりないので、F#(fsLex、fsYacc、FParsec)を使用した例を見てきました。私はF#にあまり詳しくありませんが、ワークフローとLINQの経験はあります。
DSLの単純さを考えると、LINQを使用してレクサーを実装する必要はありません。ワークフロー(私はV4を使用します)は文法を実装するのに魅力的です。私はそれをよく知っているので、そのグラフィックの性質を考えると他の人に説明しやすく、Microsoftによってサポートされており、おそらく進化し続けます。
ただし、DSLがより洗練されたものになると、WF実装がネストされたアクティビティの地獄になり、LINQベースのレクサーが同じように機能することを想像できます。その時点で、F#を学習し、F#ツールの1つを使用する方が理にかなっています。
他の人がWFとF#の解析ツールを比較して単純なDSLインタープリターを実装したかどうか、そして結論はどうなるのか疑問に思います。
parsing - 引用符なしで文字列をキャプチャする方法
引用符なしで引用符付きの文字列をキャプチャしようとしています。私はこの端末を持っています
そしてこのプロダクション
これらのレクサー規則とともに
a に至るまでのすべてを、QUOTE
解析しない単一の語彙素として解釈しているようです。したがって、私の問題は文法のどこかにあるのかもしれません-よくわかりません. 私はこれを正しい方法で行っていますか?文字列から引用符を除外しようとする前は、問題なく解析されていました。
アップデート
次のレクサー規則にはあいまいさがあると思います
次のルールは、STRING
STRING
正規表現に引用符を含めずにこれらを明確にする方法はありますか?
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# での字句解析と解析の同時実行
fslex と fsyacc を使用しているときに、字句解析と解析を同時に実行する簡単な方法はありますか?