問題タブ [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# - 次の ocamlyacc コードに相当する fsyacc は何ですか?
私は、F# を使用するおもちゃのコンパイラ、つまり FsLex と FsYacc の組み合わせに取り組んでいます。それらに慣れるために、Expert F# (v2) book (いい本です) の Lexer/Parser の章を読みました。現在、私はお勧めの ocamlyacc チュートリアルの途中まで進み、最後の例である Multi-Function Calculator mfcalcに行き詰まっています。特に、次のステートメント
パーサー ファイルで、私のF# バージョンで "error: parse error" というエラーが発生し続けます。ここに欠けているものはありますか? それとも、これは現在 F# でサポートされていない機能ですか?
c# - c -> c# 翻訳、ツール
C アプリケーションを .Net に変換したいと考えており、タスクを自動化する方法を考えています。Cファイルを「解析」してコンパイルする必要はありません。むしろ、プロジェクト構造を再作成したり、Cファイルに対応する.Netクラスを作成したりしたいのです.YACC/LEXツールや他のパーサーを見る意味はありますか?発電機?C コードから AST を作成できれば、そこから C# コードを取得できるでしょうか?
f# - Fsyacc:同じキーを持つアイテムが追加されました
Fslex/Fsyaccで遊び始めています。この入力を使用してパーサーを生成しようとする場合
Parser.fsy:
Ast.fs
Fsyaccは次のエラーを報告します:「FSYACC:エラーFSY000:同じキーを持つアイテムがすでに追加されています。」
問題はの制作にあると思いますが、AssignmentList
回避策を見つけることができません...
ヒントをいただければ幸いです
f# - 単項マイナスを使用したFsyaccの例の文法の拡張
「F#Parsed Language Starter」の一部として提供されているサンプル文法を拡張して、単項マイナス(2 * -5などの式の場合)をサポートしようとしました。
ここでSamsdramのようなブロックをヒットしました
基本的に、次のように.fsyファイルのヘッダーを拡張して優先順位を含めました。
そして、そのような文法の規則:
また、ASTの定義:
ただし、上記の式を解析しようとすると、パーサーエラーが発生します。
何が欠けているのかアイデアはありますか?F#コンパイラのソースコードを読みましたが、これをどのように解決するかは明確ではありませんが、非常に似ているようです
編集
優先順位は次のように順序付けられます。
f# - fsyacc: 演算子を言語で定義できるようにする
fsyacc には、解析時に導入される演算子を処理する方法がありますか? LLVMチュートリアルの例として使用されるおもちゃの言語であるKaleidoscope用のパーサーを構築しようとしています。Kaleidoscope では、演算子を優先レベルとともに定義できます。例えば:
parsing - ある言語用に開発された FsYacc パーサーを、別の言語の解析プロセスの一部として使用することはできますか?
2 つの言語 L1 と L2 の解析と式の評価を実装しています。重要なことは、L1 は別の言語として、または L2 の一部として使用でき、L2 には L1 にはないいくつかのキーワードのみが含まれていることです。
私はすでにLexing -> Parsing -> AST production -> L1 の AST 処理プロセスを実行しており、この F# にはFsLex、FsYaccユーティリティを使用しています。
別の言語の L2 を解析する際に、既に開発された解析プロセス (トークン、L1 パーサーで定義されたAST 生成)を使用することは可能ですか?
AST : L1 の AST は L2 の AST の一部として使用され、同じ AST 処理プロセスで使用されます。
FsLex Lexer : 可能性は両方の言語に共通であり、L1 lexer に L2 のいくつかの欠落キーワードを含めるだけで済みます。しかし、L1 と L2 に別々のレクサーを用意し、L2 レクサーから L1 を参照することができれば、すばらしいでしょう。
FsYacc パーサー: すべての L1 パーサー コードを L2 に「copy-C」したくありません。 L1 パーサーで定義された L2、トークン、および AST データ生成で参照する方法はありますか?
前もって感謝します
f# - fsyacc/fslex と FParsec のどちらを選択しますか?
次のような単純な DSL 言語を解析する必要があります。
この種の言語を解析するのに最も適したツールは何ですか?
f# - F#パターンマッチング:同じパラメーターを共有する可能性のあるタイプのセットを一致させる方法は?
私はF#を初めて使用し、パターンマッチングのアイデア全体に精通していません。問題のより良い解決策を探しましたが、問題を適切に表現することすらできないのではないかと心配しています。質問のタイトルが少なくともある程度正確であることを願っています。
私がやりたいのは、から2つの「パラメータ」を抽出することですlistMethod
。
listMethod
文字列と「パラメータ」を持ついくつかのタイプの1つですExpression
(パラメータは間違った用語だと思います):
次に、作業を続けvarDecl
、最後に、に基づいて作成したいくつかの一時変数を使用する実際のlistMethodコードと同様の一致式を作成しvarDecl
ます。
私の質問は次のとおりです。上記のコードをよりコンパクトにするにはどうすればよいですか?
string
2つのパラメーター(typeとExpression
)を持つすべてのタイプを自分でリストせずに一致させたいのですが、これはちょっと醜くて保守が困難です。
タイプは次のListMethod
ように宣言されます(すべてがFsLex / FsYaccプロジェクトです)。
(現在、私はフォームのタイプしか持っていませんstring * Expr
が、それは変更されます)。
これは、経験のある人にとってはかなり馬鹿げた質問だと思いますが、私が言ったように、私はF#を初めて使用し、自分で解決策を見つけることができませんでした。
前もって感謝します!
編集: 私は本当にすべての可能なタイプをlistMethod
2回リストすることを避けたいです。式でワイルドカードまたはプレースホルダーを使用する方法がない場合match
は、タイプを変更して、listMethod
よりクリーンにすることができます。
頭に浮かぶオプションの1つは、1つのタイプのみlistMethod
を作成し、具象タイプの3番目のパラメーター(Select、Where、Sum)を作成することです。それとももっと良いアプローチがありますか?
f# - ワークフローまたはfsYaccを使用する必要がありますか?
.Netプラットフォームで解析する必要のある非常に単純なDSLがあります。パーサーの経験があまりないので、F#(fsLex、fsYacc、FParsec)を使用した例を見てきました。私はF#にあまり詳しくありませんが、ワークフローとLINQの経験はあります。
DSLの単純さを考えると、LINQを使用してレクサーを実装する必要はありません。ワークフロー(私はV4を使用します)は文法を実装するのに魅力的です。私はそれをよく知っているので、そのグラフィックの性質を考えると他の人に説明しやすく、Microsoftによってサポートされており、おそらく進化し続けます。
ただし、DSLがより洗練されたものになると、WF実装がネストされたアクティビティの地獄になり、LINQベースのレクサーが同じように機能することを想像できます。その時点で、F#を学習し、F#ツールの1つを使用する方が理にかなっています。
他の人がWFとF#の解析ツールを比較して単純なDSLインタープリターを実装したかどうか、そして結論はどうなるのか疑問に思います。
f# - Fsyacc で解析中の意味のあるエラー
ソース コードを解析するために、F# Power Pack の fsyacc/fslex を使用しています。
エラーを検出するには、次のコードを使用します。
しかし、このコードが複数行のソース ファイルの解析でエラー メッセージをスローすると、行と列の位置が間違っています。
エラーが発生した行番号を正しく取得するにはどうすればよいですか?