問題タブ [alex]
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.
regex - Haskell における正規表現と字句解析器
私は Haskell を使い始めており、Alexツールを使用して正規表現を作成しようとしていますが、少し迷っています。私の最初の不便はコンパイル部分でした。アレックスでファイルをコンパイルするにはどうすればよいですか?. 次に、アレックスが生成するモジュールをコードにインポートする必要があると思いますが、よくわかりません。誰かが私を助けることができれば、私はとても素晴らしいです!
haskell - Alex + Happyを使用して簡単なインタプリタを作成するためのチュートリアルはありますか?
私は、HaskellでAlex+Happyを使用して簡単な言語の通訳を作成する必要がある学校のプロジェクトに取り組んでいます。
ドキュメントを読んだ後、私はそれのほとんどを理解しましたが、ツールの使用に関する本格的な例を見たいと思います。
haskell - Happy/Haskellで解析中に複数のセマンティック値を保持するにはどうすればよいですか
HaskellでAlex/Happyを使用して単純なレクサー/パーサーを構築しようとしています。テキストファイルのローカリゼーション情報を最終的なASTに保持したいと思います。
ローカリゼーションを使用してトークンのリストを作成するAlexを使用してレクサーを作成することができました。
Happyファイルで、%token部分を宣言するときに、$$記号を使用してトークンのセマンティック部分を宣言できます。
解析ルールでは、$iはこの$$を参照します。
AlexPosn部分とFOOトークンのFoo部分を参照する方法はありますか?今のところ、私はそれらのうちの1つだけを参照する方法しか知りません。''いくつかの$$を追加する''方法に関する情報を見つけて、後でそれらを参照することができます。
そうする方法はありますか?
V。
haskell - 改行を Alex/Haskell と一致させる方法
ここで提示された例をお借りしました
http://www.haskell.org/alex/doc/html/introduction.html
数式のインタプリタを作ろうとしています。(リテラルのみ、変数なし) そして、改行で 2 つの異なる式を分離したいと考えています。残念ながら、私がこれを行うとき
$ignoredWhite = [\t\f\v\r] -- 空白を無視
$newline = "\n" --改行
Alex (v 2.2) はコンパイルを中止します。私が試してみました
$newline = \n --改行
しかし、それは、入力を読み取っているときに、アボートが alex から最終バイナリ (別名 ghc によって生成されたもの) に移動するだけです。
これを修正するにはどうすればよいですか?
haskell - カバルでアレックス/ハッピーを使う
私が取っているクラスのコンパイラを書いています。このクラスは特に Haskell ではありませんが、Haskell を使用してコンパイラとインタープリターを作成しています。私の教授が簡単に実行/コンパイルできるように、cabal パッケージをセットアップしました。両方の実行可能ファイルの build-tools フィールドに happy と alex がありますが、Cabal はそれを無視し、Happy と Alex が生成すべきモジュールが見つからないと文句を言います。手動で実行した場合:
その後、陰謀団は完全に実行されます。
以前はcabalが自動的にそれらを実行していたと思いましたが、おそらく私の記憶は不完全です.
リンプ・カバル:
ディレクトリ レイアウト:
regex - Alex文法の単一の文字と一致することはできません
私はついにYIに追加したいGitCommitメッセージモードを具体化することに戻りましたが、基本的なものが欠けているようです。文法の1つの文字に一致するようには見えません。すべてのルールは、行全体に一致する場合にのみ機能します。YIの他の文法は明らかにこれを行うので、これが可能でなければならないことを私は知っていますが、同じことをすることはうまくいかないようです。
最終的にvimのものと非常によく似たコミットモードが欲しいです。vimのモードで役立つものの1つは、コメント内で強調表示されるキーワードです。Gitは、実行するほとんどすべてのこと(コミット、リベースなど)のコメント内に大量の情報を入れるので、これは便利です。私の考えは、gitコメントの最初の「#」文字と一致し、キーワードと一致する別のコンテキストに切り替えることでした。ただし、「#」だけに一致するルールを作成できないようです。ルールは、「#」のみを含む行ではコメントスタイルに切り替わりますが、「#」の後に何かを含む行ではスタイルが切り替わりません。
私が今持っているのは:
詳細は明らかに省略。アイデアは、「#」が表示されたら「lineComment」モードに切り替え、行の終わりが表示されるまでスタイルを変えることです。ドキュメントと例によると、私がやりたいことをする方法があるはずです。'#'パターンについて考えられるほとんどすべての順列を試しましたが、表示されている動作は何も変わりません。
私が見逃している明らかなことは何ですか?
編集:上記のコードは、私のYIブランチ内の実装からのものです。ここで同じ問題を示すスタンドアロンのパーサーがあります。実行alex GitCommit.x && ghc --make GitCommit.hs && ./GitCommit < shortmsg
すると、コンテンツが解析されたコメント行とMessageLine
、正しくマークされた空のコメント行が表示されCommentStart
ます。
haskell - レクサーを書くためのhaskellEDSLはありますか?
レクサーフェーズと解析フェーズを1つのフェーズに混在させると、Parsecパーサーが読みにくくなるだけでなく、速度が低下することがあります。1つの解決策は、Alexをトークナイザーとして使用し、次にParsecをトークンストリームのパーサーとして使用することです。
これは問題ありませんが、コンパイルパイプラインに前処理フェーズが1つ追加されたり、haskellの「IDE」とうまく統合されなかったりするため、Alexを取り除くことができればさらに良いでしょう。アレックスのスタイルで、しかしライブラリとして、トークナイザーを記述するためのhaskellEDSL。
haskell - チルダ アクセント マーク アレックス
私はHaskellでコンパイラを構築しています。チルダ アクセント記号を含む文字の解析に問題があります。私はアレックス2.3.3を使用しています。解決策が見つかりません。助けてください。
haskell - AlexでのHaskellデータ型パターンマッチング
Haskellに次のようなデータ型があるとします。
アレックスから、私はそれを得る:
私はこのようなパターンマッチングを行うことができます:
しかし、私がここで本当に達成したいのはこれです:
ただし、次のようになります。
助言がありますか?
bnf - [af]?lex 正規表現の違い
これを行う方法がわからず、この操作を実行する方法についてオンラインで適切なリソースが見つかりませんでした[.] 2つの正規表現の違いである注釈付きのEBNF生成ルールを取得して、 a(na| f?)lex grammar specification rule[.] 問題は、これを通常どおり行う方法が見当たらないことです[.]{3} クリーネ代数を使用してこれを行う方法はありますか?文脈自由文法における代替との空の一致[?]