問題タブ [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.
msbuild - Vs2013 で FsLex/Yacc を使用する
vs 2008 で作業していた古い f# パーサー プロジェクトを、vs 2013 で作業するために復活させようとしています。FsLexYacc を使用します。
次のように、ビルド前のステップを使用して問題なくビルドできました。
ただし、入力が変更されたかどうかに関係なく常に実行されるため、これは理想的とは言えません。
次に、古い MsBuild アクションを使用してみました。
しかし、これらはビルド プロセス中に完全に無視されたようです。そうですか?これらのビルド タスクは何らかの方法で削除されましたか?
次に、vs C++ の下に文書化されているいくつかのものを見つけました。
と
(Microsoft.Fsharp.Targets ファイルを調べて、「CoreCompile」ターゲットを見つけました。)
残念ながら、まだ葉巻はありません。
fslex/yacc を vs 2013 ソリューションに適切に統合することが実際に可能かどうか、また可能であれば、その方法を明らかにできる人はいますか?
parsing - F# lex/yacc パーサーで「マイナス」演算子と負数を区別する
FsLex と FsYacc を使用して単純なスクリプト言語を解析しようとしていますが、マイナス演算子と負の数値を区別するのに問題があります。
「1 - 2」という用語を評価すると、パーサーは目的の AST: を返しますMinus(NumberLiteral(1.0),NumberLiteral(2.0))
。しかし、「1-2」という用語を評価すると、レクサーは数値 1 を生成し、その後に数値 -2 が続きますが、これは有効な入力ではありません。
問題を再現するための最小限のプログラムを作成しました。Ast は次のように定義されます。
レクサーコードは次のようになります。
パーサーは次のようになります。
私が最初に考えた-
のは、レキサーで as を数値の一部として処理せず、パーサーにMINUS
トークンの結果がマイナス演算子になるかマイナス数値になるかを判断させることでした。残念ながら、空白が消費されるため、入力 "- 2" が負の数として評価されることにもなります。
しかし、これは共通の問題であり、共通の解決策が存在するに違いないと思います。では、これをどのように処理するのが最善でしょうか?
f# - FsLexYacc : Tests/MiniProject ".fsproj のインポートが正しくありません"
githubでは、FsLexYaccプロジェクトにtest dir があります。最も単純なもの (「LexAndYaccMiniProject」) をセットアップしようとします。
次の手順に従います。
1/ 「LexAndYaccMiniProject」という名前の F# コンソール アプリを作成します。
2/ パッケージをインストールします ( VS 2013 コミュニティの「 PM > Install-Package FsLexYacc」は正常に実行されますが、プロジェクト ディレクトリの下のパッケージ ディレクトリにファイルを作成するだけです)。
3/ 解決策を閉じる
4/ すべてのファイル ( Lexer.fsl、Parser.fsy、Program.fs、LexAndYaccMiniProject.fsproj、App.config ) を github からローカル プロジェクト ディレクトリにコピーします。
5/解決策を開く --> 「bin\Debug\FsLexYacc.targets」ファイルが存在しないというエラー メッセージ。
FsLexYaccメイン ページのインストール手順から、以下を含む .fsproj へのリンクを取得します。
これは別のプロジェクト ( TestProjectUsingNugetPackage )に関連しており、既にコピーしたプロジェクト (「LexAndYaccMiniProject」)を参照している上記の「例」セクションにあるリンクとは異なります。
明らかに、FsLexYacc のメイン ページのインストール手順セクションでは、最近 github でホストされている 2 つの異なるプロジェクトへのリンクが参照されています。
質問: 不足している手順は何ですか? 次に何を確認すればよいですか?
f# - FSYACC でのレコード タイプの使用
FSYACC では、結果がタプルになる端末を持つのが一般的です。ただし、便宜上、代わりにレコード型を使用したいと考えています。たとえば、抽象構文ツリー (AbstractSyntaxTree.fsl) に次のものがあるとします。
FSYACC (parser.fsy) の正しい構文については明確ではありません。
タイプ B とタプルが推論されることを期待します。ただし、FSYACC は、"!!!" でマークされた両方の行でエラーを返します。
最後の 2 行の "either" 生成の正しい構文は何ですか?
f# - F# でのインタープリター開発のために Visual Studio/JetBrains Rider をセットアップする方法は?
しばらくの間、インタープリター開発の学習を開始するために FsLexYacc パッケージなどを含めるように IDE (Visual Studio および JetBrains Rider) を構成する際に問題が発生しました。.fsproj ファイルに構成を追加する方法について、GitHub のこのガイドに従っていますが、認識されないタグ FsYacc の問題で VS 2017 がクラッシュしました。また、オンラインのテンプレートを探していましたが、利用できるものはありませんでした。おそらく、同じ問題を経験していて、解決策を見つけて助けてくれる人がいるでしょうか?
編集: .fsproj ファイルを更新するときに IDE がスローするエラー: