ドキュメントとフォーラムでの長い検索にもかかわらず、node.js で JSON 形式を使用して Jison開始条件の正しい構文を取得できません。
> ** Documentation at http://zaach.github.io/jison/docs/ says:
> // Using the JSON format, start conditions are defined with an array
> // before the rule’s
> matcher {rules:[
> [['expect'], '[0-9]+"."[0-9]+', 'console.log( "found a float, = " + yytext );'
> ]]}
しかし、残念ながら、完全に機能するサンプルを提供している人はいません。
2 つのタグの間にあるテキストを除外しようとしています。lex では開始条件を使用します。Jisonのドキュメントには、それが機能するはずだと書かれています。それにもかかわらず、Jison のエラー メッセージはあまり直感的ではないため、先に進むための実用的なサンプルを見つけていただければ幸いです。
誰にも解決策がありますか?
var jison = require("jison").Parser;
grammar = {
"lex": {
"rules" : [ [" +" , "/* skip whitespace */"]
,[['mode1'], '[0-z]+\\b' , "return 'INFO';"]
,[['mode1'], '<\\/extensions>' , "this.popState(); return 'EXTEND';"]
,['<extensions>' , "this.begin('mode1'); return 'EXTSTART';"]
,['$' , "return 'EOL';"]
]
}, // end Lex rules
"bnf": { // WARNING: only one space in between TOKEN ex: "STOP EOF"
'data': [["EOL" , "this.cmd='EMPTY' ; return (this);"]
,['EXTSTART INFO EXTEND EOL' ,"this.cmd='EXTEN';this.value=$2;return (this);"]
]
}};
parser = new jison(grammar);
test= "\
<extensions>\
<opencpn:start></opencpn:start><opencpn:end></opencpn:end>\
<opencpn:viz>1</opencpn:viz>\
<opencpn:guid>714d1d6e-78be-46a0-af6e-2f3d0c505f6d</opencpn:guid>\
</extensions>";
data=parser.parse (test);
私の現在のサンプルは失敗します
/node_modules/jison/node_modules/jison-lex/regexp-lexer.js:42 startConditions[条件[k]].rules.push(i);