楽しみのために、あなたの「文法」を PEG.js 内に実装しようとしました
http://pegjs.majda.cz/onlineにアクセスし、文法部分 (1) に次の文法を貼り付けます。
start
= fruits
fruits
= ft:fruit "@" fts:fruits {fts[ft[0]] = ft[1]; return fts;}
/ ft:fruit {var fruits = {}; fruits[ft[0]] = ft[1]; return fruits;}
fruit
= name:word "-" flavs:flavors {var ft = []; ft.push(name); ft.push(flavs); return ft;}
/ name:word {var ft = []; ft.push(name); ft.push([]); return ft;}
flavors
= flavor:word "#" flavs:flavors {flavs.unshift(flavor); return flavs;}
/ flavor:word { var tab = []; tab.push(flavor); return tab;}
word
= value:[a-zA-Z/]+ {return value.join("");}
次に、文章を入力セクションに入れます (2)
Apple-sweet#tangy@Bannana@Orange-citrusy@Pear-crispy#green/yellow
結果は次のとおりです。
{
"Pear": [
"crispy",
"green/yellow"
],
"Orange": [
"citrusy"
],
"Bannana": [],
"Apple": [
"sweet",
"tangy"
]
}
次に、結果の JavaScript パーサーをファイルに埋め込みます。これにより、語彙/構文解析ジョブを気にする必要がなくなります。セマンティックレベルのIMHOでのみ機能するようになるための保守性が向上します:)
非常に強力な API ですが、この特定のケースでは少しやり過ぎです ;)