問題タブ [ragel]
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.
java - Ragel - 入力中に文字列を検証する
ユーザーが JTextField に入力しているときに、ユーザー入力を検証したいとします。ユーザー入力の検証には、Ragel を使用できないかと考えています。
入力が次の例の正規表現に従う必要があると仮定します。
ラゲルでこれを行うにはどうすればよいですか?Ragel を使用してユーザー入力を「その場で」(入力中に) 検証する方法の短い例を誰かに教えてもらえますか?
Ragel のドキュメントには、クイック スタートの良い例がいくつか欠けているので、ここで質問します。
parsing - ANTLRは、バイナリデータ形式をシリアル化/逆シリアル化するための適切なツールですか?
スマート電気メーターと通信するためにさまざまなネットワークを介して送信するオクテットストリームを読み書きする必要があります。バイナリデータ形式を説明するANSI規格ANSIC12.19があります。データ形式はそれほど複雑ではありませんが、標準は非常に大きく(500ページ以上)、多くの異なるタイプを記述しています。この標準は、EBNF文法によって完全に記述されています。ANTLRを利用してEBNF文法またはその修正バージョンを読み取り、オクテットストリームを読み書きできるC#クラスを作成することを検討しています。
これはANTLRの良い使い方ですか?
もしそうなら、ANTLR 3.1を利用できるようにするために何をする必要がありますか?ニュースグループのアーカイブを検索すると、文字の代わりにバイトを読み取ることができる新しいストリームを実装する必要があるようです。それですべてですか、それともレクサー派生物も実装する必要がありますか?
ANTLRがストリームの読み取り/解析に役立つ場合、ストリームの書き込みにも役立ちますか?
ありがとう。
ダンフィヌケーン
ruby - 無限ストリーム用の (純粋な Ruby) Ragel パーサーをカプセル化しますか?
Ragel を使用してステート マシンで (ソケットからの) バイトの連続ストリームを解析したい
ただし、私が見つけたすべての例は、1回のパスで完全なファイルを解析している ( Gherkin lexer のように)か、Ragels C Target ( mongrel HTTP1.1 Parserのように)を使用しています。
Ragel State マシンをインスタンス化し、それにバイトを追加して、既存の状態をそのまま維持する方法に関するアドバイスや例を探しています。
私が探している最終的なインターフェースは次のようなものです:
Ragel でそれを行う方法についてのアドバイスは大歓迎です。別のステートマシンを手動でコーディングするよりも、それを使用したいと思います。
Ragel は適切なツールではないのでしょうか。そうでない場合: 代わりに何を使用すればよいですか?
java - abusing ragel, possibly need new approach / tool
I'm trying to use Ragel to implement a simple yes/no fsm. Unfortunately the language specification consists of the union of about a thousand regular expressions, with * operators appearing once or more in the majority of them. So, the number of possible states explodes and it seems it will be impossible to use Ragel to generate an fsm for my language. Is there a tool out there that can do what I need, or should I swap approaches? I need something better than checking input strings against each regular expression in turn. I could chop up the thousand regular expressions into chunks of ~50 and generate an fsm for each, and run every input string against all the machines, but if there's a tool that can handle this kind of job without such a hack I'd be pleased to hear of it.
Thanks!
parsing - ファイルから取得した単語のリストをトークン化するパーサーを作成するにはどうすればよいですか?
コンパイラのクラスの構文テキスト修正を実行しようとしています。アイデアは次のとおりです。「ルビーは素晴らしい」のように、「有効なフレーズはSUBJECT VERB ADJECTIVE」のように、言語(私の場合はポルトガル語)に固有のルールがいくつかあります。
さて、最初に「ルビーは素晴らしい」という入力をトークン化する必要があります。だから私はたくさんの動詞を1行ずつ含むテキストファイル「動詞」を持っています。次に、「形容詞」、「代名詞」などのテキストが1つあります。
Ragelを使用してパーサーを作成しようとしていますが、次のような方法がわかりません。
ANTLR、Lex / Yacc、Ragelなどを調べましたが、この問題を解決していると思われるものは見つかりませんでした。これを行う唯一の方法は、Ragelの入力ファイルを前処理して、プログラムがファイルを読み取り、その内容を適切な場所に書き込むようにすることでした。しかし、私もこの解決策が好きではありません。
誰かが私がこれを行う方法を知っていますか?Ragelがなくても問題ありませんが、この問題を解決したいだけです。RubyまたはPythonを使用したいのですが、それも実際には必要ありません。
ありがとう。
parsing - Ragel でテンプレート言語を解析するには?
私は単純なテンプレート言語のパーサーに取り組んできました。ラジェルを使用しています。
要件は控えめです。入力文字列のどこにでも埋め込むことができる [[tags]] を見つけようとしています。
{{foo}} などのタグを HTML に埋め込むことができる単純なテンプレート言語を解析しようとしています。これを解析するためにいくつかのアプローチを試みましたが、Ragel スキャナーを使用することに頼らなければならず、単一の文字のみを「キャッチオール」として一致させるという非効率的なアプローチを使用する必要がありました。これは間違ったやり方だと思います。基本的に、スキャナーの最長一致バイアスを悪用して、デフォルトのルールを実装しています (1 文字の長さしかないため、常に最後の手段にする必要があります)。
(アクションはルビで書かれていますが、理解しやすいはずです)。
このような単純な言語のパーサーを作成するにはどうすればよいでしょうか? Ragel は適切なツールではないでしょうか? このような構文が予測できない場合は、Ragel の歯と爪と戦わなければならないようです。
d - パーサージェネレーターと Ragel... 自作の D パーサー
私はコンパイラの世界に不慣れで、最近、パーサー ジェネレーターと呼ばれるものについて耳にしました。私が理解した (と思う) ことから、パーサー ジェネレーターは構文ファイルを取り込み、指定された構文でファイルを解析できるソース コード ファイルを出力します。
いくつかの質問:
私はそれを正しく理解しましたか?
もしそうなら、ラゲルはそのようなツールですか?
そうである場合、Ragel は D パーサーを D ソース コードに出力できますか?
ありがとうございました!
c - Ragel コードのこの部分は何をしますか?
編集:この ">" 演算子の意味を理解してください。@jcomeu へのコメントで、ragel ガイドからその説明を引用しました。
RecordDigit の前に ClearNumber アクションが呼び出されることを理解しています。
最後に数の定義です。とはnumber=((digit @RecordDigit)+) >ClearNumber
どういう意味ですか?
これはコードのソースです: here
EDIT : *具体的には、RecordDigit はどのように機能しますか? pdigit =(*p)- '0';
とはポインター?もしそうなら、それは何を指していますか?とはどういう意味ですか? 【解決済み】
lexical-analysis - Ragel を使用して識別子を適切にスキャンする方法
個人的な理由で設計している C/C++/C#/Java/D に似たプログラミング言語用のスキャナーを作成しようとしています。このタスクでは、Ragel を使用してスキャナーを生成しています。多くのオペレーターがアクションをトリガーするタイミングを正確に理解するのに苦労しています。おそらく、私の学者は理論よりも実践的な知識に焦点を当てていたためであり、この非決定論的/決定論的な有限オートマトン ビジネスの多くが私の頭の中にあります。ドキュメントが不足しているか、それについての私の理解が不足していると思います。私は後者を想定しています。
いずれにせよ、私は基本から上に向かって取り組んでいます。最初の繰り返しで、いくつかのキーワードと特殊文字を特定しました。今、すべてのキーワードが識別子としてスキャンされているという問題に遭遇しました。すべてのキーワードにスキャナー演算子を使用しています。これにより、文字列がandキーワードreturns
の両方としてスキャンされるという問題が解決されました。return
returns
識別子を正しくスキャンするにはどうすればよいですか? identifier
これを決定論的にするには、他のトークンのパターンと一致しない場合にのみ語彙素が になることを効果的に指定する必要があることを理解しています。私の知識不足をお許しください。
Ragel スクリプト: