レクシングと構文解析が新しく、タイトルが明確でない場合はごめんなさい。Jisonレクサーで複数のトークンを返す方法
基本的に、私はJisonを使ってテキストを解析しています。字下げを理解するためにレクサーを取得しようとしています。問題のビットは次のとおりです。
これまでのところ、ほぼすべてが期待どおりに動作しています。 1つの問題は、DEDENT
トークンの配列を返そうとする行です。 Jisonは配列を文字列に変換しているだけなので、Expecting ........, got DEDENT,DEDENT
のような解析エラーが出ます。
これを回避するには、DEDENT
のトークンを手動でスタックにプッシュすることができます。たぶん、this.pushToken('DEDENT')
のような関数か、それらの行に沿ったものでしょうか。しかし、Jisonのドキュメントはそれほど素晴らしいものではなく、私はいくつかの助けをすることができます。
どのような考えですか?
EDIT:
私は、生成されたパーサのコードを見た後にこの周り私の方法をハックすることができたように見えます。ここで
if (tokens.length) {
var args = arguments;
tokens.slice(1).forEach(function() {
lexer.performAction.apply(this, args);
}.bind(this));
return 'DEDENT';
}
このトリックレクサーので、それが正しいdedentsに追加することができ、我々はスタックに持っている各DEDENT
の正確な同じ入力を使用して別のアクションを実行するに...動作するように思われるものです。しかし、それは全体的に感じて、私は予期せぬ問題が発生する可能性があることを心配しています。
誰かがこれを行うより良い方法についてアイディアを持っていれば、私はまだそれを愛するでしょう。