-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch_index.zh.js
1 lines (1 loc) · 53.1 KB
/
search_index.zh.js
1
window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer-zh","stopWordFilter-zh","stemmer-zh"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"A":{"docs":{},"df":0,"N":{"docs":{},"df":0,"L":{"docs":{},"df":0,"T":{"docs":{},"df":0,"R":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1}}},"T":{"docs":{},"df":0,"L":{"docs":{},"df":0,"R":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":5.385164807134504}},"df":1}}}},"S":{"docs":{},"df":0,"T":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":5.291502622129181}},"df":1,"L":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"T":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}},"C":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"T":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"D":{"docs":{},"df":0,"O":{"docs":{},"df":0,"T":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"E":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1,"N":{"docs":{},"df":0,"D":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.8284271247461903}},"df":1}}},"G":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}}}}}}}},"I":{"docs":{},"df":0,"D":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":5.291502622129181}},"df":1},"N":{"docs":{},"df":0,"T":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.8284271247461903}},"df":1}},"R":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"P":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}}},"R":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"E":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"S":{"docs":{},"df":0,"T":{"docs":{},"df":0,"A":{"docs":{},"df":0,"R":{"docs":{},"df":0,"T":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.6457513110645907}},"df":1}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}},"T":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}},"V":{"docs":{},"df":0,"E":{"docs":{},"df":0,"C":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1}},"e":{"docs":{},"df":0,"c":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"M":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":3.7416573867739413}},"df":1,"A":{"docs":{},"df":0,"S":{"docs":{},"df":0,"T":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1,"P":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"W":{"docs":{},"df":0,"S":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1}},"a":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.23606797749979}},"df":1,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/about/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"d":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"y":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}}}}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{"https://fetchadd.github.io/blogs/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"c":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":6.48074069840786}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}},"g":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":3.1622776601683795}},"df":1,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.6457513110645907}},"df":1}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.23606797749979}},"df":1}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.23606797749979}},"df":1}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"E":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":3.0}},"df":1}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.449489742783178}},"df":1,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"f":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":3.0}},"df":1}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":5.477225575051661}},"df":1}}},"o":{"docs":{},"df":0,"g":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":3.1622776601683795}},"df":1}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}},"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1,"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":3.872983346207417}},"df":1,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.449489742783178}},"df":1}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1,"V":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1,"s":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1},"z":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1},"一":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1,"下":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"个":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":2},"些":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"本":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"样":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"步":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"上":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":2,"面":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"下":{"docs":{},"df":0,"载":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"面":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1}},"不":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":2.23606797749979}},"df":2,"了":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"可":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"多":{"docs":{},"df":0,"得":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}},"同":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"是":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"过":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"难":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"与":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1},"两":{"docs":{},"df":0,"样":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"者":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"中":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":3.872983346207417}},"df":1,"将":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"为":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":3.1622776601683795}},"df":1},"之":{"docs":{},"df":0,"前":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"后":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"也":{"docs":{"https://fetchadd.github.io/about/":{"tf":1.0},"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":3},"书":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.449489742783178}},"df":1,"写":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"事":{"docs":{},"df":0,"情":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"于":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"产":{"docs":{},"df":0,"生":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1}},"人":{"docs":{"https://fetchadd.github.io/about/":{"tf":1.0},"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":2},"什":{"docs":{},"df":0,"么":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"介":{"docs":{},"df":0,"绍":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"从":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"代":{"docs":{},"df":0,"码":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1}},"以":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.449489742783178}},"df":1,"及":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.4142135623730951}},"df":1}},"会":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.23606797749979}},"df":1},"余":{"docs":{"https://fetchadd.github.io/about/":{"tf":1.0}},"df":1},"作":{"docs":{},"df":0,"为":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"使":{"docs":{},"df":0,"用":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.4142135623730951},"https://fetchadd.github.io/blogs/lip/":{"tf":3.7416573867739413}},"df":2}},"例":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"便":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"做":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"不":{"docs":{},"df":0,"了":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}},"充":{"docs":{},"df":0,"分":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"发":{"docs":{},"df":0,"挥":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}},"先":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1},"全":{"docs":{},"df":0,"部":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"关":{"docs":{},"df":0,"系":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"其":{"docs":{},"df":0,"他":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"具":{"docs":{},"df":0,"体":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"兼":{"docs":{},"df":0,"容":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"内":{"docs":{},"df":0,"容":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":2},"置":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"写":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"几":{"docs":{},"df":0,"乎":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"出":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"函":{"docs":{},"df":0,"数":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"分":{"docs":{},"df":0,"发":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"创":{"docs":{},"df":0,"建":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"到":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"功":{"docs":{},"df":0,"能":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"动":{"docs":{},"df":0,"作":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1},"手":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"匹":{"docs":{},"df":0,"配":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"区":{"docs":{},"df":0,"别":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"单":{"docs":{},"df":0,"独":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"即":{"docs":{},"df":0,"使":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1},"可":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"参":{"docs":{},"df":0,"照":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"考":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"发":{"docs":{},"df":0,"挥":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"变":{"docs":{},"df":0,"化":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"成":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"只":{"docs":{},"df":0,"能":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"可":{"docs":{},"df":0,"以":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.23606797749979}},"df":1},"视":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1,"化":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}}},"合":{"docs":{},"df":0,"乎":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"同":{"docs":{},"df":0,"时":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"名":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"后":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.449489742783178}},"df":1},"含":{"docs":{},"df":0,"有":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"启":{"docs":{},"df":0,"始":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"和":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.8284271247461903}},"df":1},"唯":{"docs":{},"df":0,"一":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"喜":{"docs":{},"df":0,"欢":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"器":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"图":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.7320508075688772},"https://fetchadd.github.io/blogs/lip/":{"tf":2.449489742783178}},"df":2,"片":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"在":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":3.4641016151377544}},"df":2},"型":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1},"基":{"docs":{},"df":0,"于":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"增":{"docs":{},"df":0,"加":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"外":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"部":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1}},"多":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1,"边":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1,"形":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}}},"好":{"docs":{},"df":0,"书":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"如":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1,"下":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"果":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"嫌":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"子":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1},"它":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":2},"完":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"定":{"docs":{},"df":0,"义":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"实":{"docs":{},"df":0,"现":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1},"用":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"型":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}},"对":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"于":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1},"应":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"比":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"将":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"尝":{"docs":{},"df":0,"试":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"就":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"要":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"属":{"docs":{},"df":0,"性":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.7320508075688772}},"df":1}},"工":{"docs":{},"df":0,"具":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"常":{"docs":{},"df":0,"用":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.7320508075688772}},"df":1}},"并":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"且":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"应":{"docs":{},"df":0,"用":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"废":{"docs":{},"df":0,"话":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"开":{"docs":{},"df":0,"头":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"强":{"docs":{},"df":0,"大":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"当":{"docs":{},"df":0,"然":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"形":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"式":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"很":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1,"多":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"大":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":2}},"得":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"到":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"想":{"docs":{},"df":0,"要":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1}},"感":{"docs":{},"df":0,"动":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"我":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1},"或":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1},"所":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"以":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"有":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"示":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"手":{"docs":{},"df":0,"动":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1},"工":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"执":{"docs":{},"df":0,"行":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"找":{"docs":{},"df":0,"到":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"技":{"docs":{},"df":0,"术":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"指":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"描":{"docs":{},"df":0,"述":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"提":{"docs":{},"df":0,"供":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"操":{"docs":{},"df":0,"作":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"改":{"docs":{},"df":0,"进":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"教":{"docs":{},"df":0,"程":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":2}},"整":{"docs":{},"df":0,"个":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"文":{"docs":{},"df":0,"件":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":2,"名":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"法":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":5.291502622129181}},"df":1}},"方":{"docs":{},"df":0,"式":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"法":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1},"面":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"无":{"docs":{},"df":0,"法":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"时":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"候":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"是":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.4142135623730951},"https://fetchadd.github.io/blogs/lip/":{"tf":3.1622776601683795}},"df":2,"否":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"普":{"docs":{},"df":0,"通":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1}},"有":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.6457513110645907}},"df":1,"关":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"本":{"docs":{},"df":0,"文":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"条":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"来":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":2},"构":{"docs":{},"df":0,"建":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":3.605551275463989}},"df":1}},"树":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":4.795831523312719}},"df":1},"样":{"docs":{},"df":0,"式":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"根":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1,"据":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1}},"模":{"docs":{},"df":0,"式":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"正":{"docs":{},"df":0,"确":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"此":{"docs":{},"df":0,"外":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"每":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"个":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"比":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"如":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"没":{"docs":{},"df":0,"什":{"docs":{},"df":0,"么":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"有":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"波":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1},"注":{"docs":{},"df":0,"意":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"流":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"添":{"docs":{},"df":0,"加":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"版":{"docs":{},"df":0,"本":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"独":{"docs":{},"df":0,"立":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"生":{"docs":{},"df":0,"成":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":2.23606797749979}},"df":2}},"用":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"处":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"画":{"docs":{},"df":0,"图":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.4142135623730951}},"df":1}},"的":{"docs":{},"df":0,"话":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1}},"直":{"docs":{},"df":0,"接":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"相":{"docs":{},"df":0,"同":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"比":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"看":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"章":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"笔":{"docs":{},"df":0,"记":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"第":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"等":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"简":{"docs":{},"df":0,"洁":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"类":{"docs":{},"df":0,"型":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":2}},"精":{"docs":{},"df":0,"神":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"结":{"docs":{},"df":0,"尾":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"构":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"论":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"给":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"编":{"docs":{},"df":0,"程":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"语":{"docs":{},"df":0,"言":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}},"译":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"而":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1,"是":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"能":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"自":{"docs":{},"df":0,"动":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":2,"化":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"己":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1}},"节":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1,"点":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":2.0},"https://fetchadd.github.io/blogs/lip/":{"tf":2.8284271247461903}},"df":2}},"行":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"表":{"docs":{},"df":0,"示":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"要":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"见":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"规":{"docs":{},"df":0,"则":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":3.3166247903554}},"df":1}},"解":{"docs":{},"df":0,"析":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":4.242640687119285}},"df":1,"器":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.8284271247461903}},"df":1}},"释":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"一":{"docs":{},"df":0,"下":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}},"让":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1},"讲":{"docs":{},"df":0,"解":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"设":{"docs":{},"df":0,"置":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"访":{"docs":{},"df":0,"问":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":3.0}},"df":1,"者":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1}}},"词":{"docs":{},"df":0,"法":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1}},"话":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1},"语":{"docs":{},"df":0,"法":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":4.242640687119285}},"df":1,"结":{"docs":{},"df":0,"构":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}},"言":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.4142135623730951},"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":2}},"说":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.4142135623730951}},"df":1},"请":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1},"调":{"docs":{},"df":0,"用":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"起":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"辅":{"docs":{},"df":0,"助":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"输":{"docs":{},"df":0,"入":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.6457513110645907}},"df":1}},"过":{"docs":{},"df":0,"程":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.23606797749979}},"df":1}},"返":{"docs":{},"df":0,"回":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1,"值":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}}},"这":{"docs":{},"df":0,"时":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"种":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"里":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1}},"进":{"docs":{},"df":0,"一":{"docs":{},"df":0,"步":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"行":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"通":{"docs":{},"df":0,"过":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"逻":{"docs":{},"df":0,"辑":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"遍":{"docs":{},"df":0,"历":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1}},"遗":{"docs":{},"df":0,"憾":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"都":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.7320508075688772}},"df":1},"重":{"docs":{},"df":0,"写":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"构":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"链":{"docs":{},"df":0,"接":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"问":{"docs":{},"df":0,"者":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":2.0}},"df":1}},"闲":{"docs":{},"df":0,"散":{"docs":{"https://fetchadd.github.io/about/":{"tf":1.0}},"df":1}},"间":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1},"降":{"docs":{},"df":0,"低":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"难":{"docs":{},"df":0,"度":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"需":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"要":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"靠":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"顺":{"docs":{},"df":0,"便":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"验":{"docs":{},"df":0,"证":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.4142135623730951}},"df":1}},"麻":{"docs":{},"df":0,"烦":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}},"title":{"root":{"docs":{},"df":0,"D":{"docs":{},"df":0,"O":{"docs":{},"df":0,"T":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://fetchadd.github.io/about/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{"https://fetchadd.github.io/blogs/":{"tf":1.0}},"df":1}}}}},"实":{"docs":{},"df":0,"现":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"教":{"docs":{},"df":0,"程":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0}},"df":1}},"文":{"docs":{},"df":0,"法":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"树":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1},"模":{"docs":{},"df":0,"式":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"笔":{"docs":{},"df":0,"记":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}},"编":{"docs":{},"df":0,"程":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1,"语":{"docs":{},"df":0,"言":{"docs":{"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":1}}}},"语":{"docs":{},"df":0,"言":{"docs":{"https://fetchadd.github.io/blogs/dot/":{"tf":1.0},"https://fetchadd.github.io/blogs/lip/":{"tf":1.0}},"df":2}}}}},"documentStore":{"save":true,"docs":{"https://fetchadd.github.io/":{"body":"","id":"https://fetchadd.github.io/","title":""},"https://fetchadd.github.io/about/":{"body":"余, 闲散人也\n","id":"https://fetchadd.github.io/about/","title":"about"},"https://fetchadd.github.io/archives/":{"body":"","id":"https://fetchadd.github.io/archives/","title":""},"https://fetchadd.github.io/blogs/":{"body":"","id":"https://fetchadd.github.io/blogs/","title":"blogs"},"https://fetchadd.github.io/blogs/dot/":{"body":"Graphviz是我很喜欢的一个可视化工具, 它使用dot语言来描述节点以及节点间的关系, 在需要自动化画图的时候用处很大,话说即使是手动使用dot画图,强大的也让人感动。\n\n废话不多说,先上一波graphviz生成的图片。\n\n\n图1: 多边形节点图2: record型节点\n\n图3: html样式的label\n\nDOT文件内容\ndigraph常用属性\nnode类型以及常用属性\nedge常用属性\n参考链接\n","id":"https://fetchadd.github.io/blogs/dot/","title":"DOT语言教程"},"https://fetchadd.github.io/blogs/lip/":{"body":"\"编程语言实现模式\"讲解了构建语言应用所需的实用型编译技术, 是一本不可多得的好书。唯一遗憾的是书中使用ANLTR3作为教程。而ANTLR4与ANTLR3相比有很大的变化,在降低文法书写难度等方面有很大改进,不过文法与之前版本的文法并不兼容\"。书中从第6章起,内容都是基于ANTLR3的,所以这里尝试将书中使用ANTLR3实现的功能用ANTLR4来重构。书中的代码可以在这里下载, 本文中使用到的所有代码都可以在书中的代码找到。\n本文中尝试重构的是\"5.3 根据文法自动生成访问器\"中的内容。\n使用ANTLR3文法构建AST\nANTLR3的普通文法规则\n书中的4.4节介绍了“使用ANTLR文法构建AST”的方法。在ANTLR3中,如果不使用树文法或语法动作, 是无法创建AST的,只能生成一个验证词法和语法是否正确的解析器。以下面的ANTLR3文法为例,在文法产生的Parser中, 每条规则对应的函数返回值为void, 如public final void prog() throws RecognitionException, 这时Parser只能验证输入是否合乎语法规则,做不了其他事情。 想要生成AST的话,就要使用树文法了(当然,不嫌麻烦的话使用规则动作也行)。\nVecMath文法\n// filename: IR/Vec/VecMath.g\ngrammar VecMath;\n\n// START: stat\nprog : stat+ ; // match multiple statements\nstat: ID '=' expr // match an assignment like \"x=3+4\"\n | 'print' expr // match a print statement like \"print 4\"\n ;\n// END: stat\n\t\t\n// START: expr\n\texpr: multExpr ('+' multExpr)* ; // E.g., \"3*4 + 9\"\nmultExpr: primary (('*'|'.') primary)* ; // E.g., \"3*4\"\nprimary\n : INT // any integer\n\t | ID // any variable name\n\t | '[' expr (',' expr)* ']' // vector literal; E.g. \"[1,2,3]\"\n\t ;\n// END: expr\n\t\t\t\t\t\t\nID : 'a'..'z'+ ;\nINT : '0'..'9'+ ;\nWS : (' '|'\\r'|'\\n')+ {skip();} ;\n\n使用ANTLR3文法生成AST\nANTLR3内置了一些辅助构建AST的功能。 在options中将output设置为AST后,ANTLR就会给每个规则方法增加返回值tree, 启始规则会返回整个树的根节点。以下面4.4和5.3节中VecMath文法为例,Parser的每条规则函数会变成形如public final VecMathASTParser.prog_return prog() throws RecognitionException的形式, 调用Parser.prog()后,便能得到AST的root节点。这里, AST的结构是通过文法定义的。比如根据规则\"stat: ID '=' expr -> ^('=' ID expr)\", 解析器在匹配\"ID '=' expr\"语法结构时,会顺便构建根节点为'=', 子节点为'ID和'expr'的AST子树,具体的构建过程可以看一下VecMathASTParser.java代码。对于下面的\"VecMath输入\", VecMathAST文法构建出的AST如图1所示。\nVecMath输入\nx = 3+4\nprint x * [2, 3, 4]\n\n\n图1\n\nVecMathAST文法\n// 文件名: IR/Vec/VecMathAST.g\n// START: header\ngrammar VecMath;\noptions {output=AST;} // we want to create ASTs\ntokens { VEC; } // define imaginary token for vector literal\n// END: header\n\n// START: stat\nprog : stat+ ; // build list of stat trees\nstat : ID '=' expr -> ^('=' ID expr) // '=' is operator subtree root\n | 'print' expr -> ^('print' expr) // 'print' is subtree root\n ;\n// END: stat\n\t\n// START: expr\nexpr : multExpr ('+'^ multExpr)* ; // '+' is root node\n\nmultExpr \n : primary (('*'^|'.'^) primary)* // '*', '.' are roots\n ;\n\t\t \nprimary\n : INT\n | ID\n | '[' expr (',' expr)* ']' -> ^(VEC expr+)\n ;\n// END: expr\n\nID : 'a'..'z'+ ;\nINT : '0'..'9'+ ;\nWS : (' '|'\\r'|'\\n')+ {skip();} ;\n使用ANTLR3树文法构建AST外部访问者\n有了AST后, ANTLR3可以使用\"树文法\"来构建AST的外部访问者,所外\"外部访问者\",是指访问过程不是在语法解析过程中进行的,而是独立于语法解析过程,是在有了AST之后,一个单独对AST进行访问的过程。 \"树文法\"与普通文法在语法规则上几乎没什么两样,区别: \"树文法\"以^开头。此外,两者产生的解析器的\"输入\"也不相同。对于普通的解析器,输入为词法解析器产生的词法token流; 而对于树文法解析器,它的输入是AST。5.3节中的树文法如下所示。有关@members {}等语法,请参照\"The Definitive ANTLR4 Reference\"。\n这里解释一下\"stat: ^('=' ID {print($ID.text+\" = \");} expr) {print(\"\\n\");}\", \"^('=' ID expr)\"这种语法: 匹配以\"=\"为根节点,以'ID'和expr为子节点的AST子树,{print(ID.text+\" = \");} 为“动作”, \"ID {print($ID.text + \" = \")}\"表示在访问完\"ID\"节点后执行\"{print($ID.txt + \" = \")}\"。\nPrint.g树文法\n// filename: walking/tree-grammar/Print.g\ntree grammar Printer; // this grammar is a tree grammar called Printer\noptions {\n tokenVocab=VecMath; // use token vocabulary from VecMath.g\n ASTLabelType=CommonTree; // use homogeneous CommonTree for $ID, etc.\n}\n@members { void print(String s) { System.out.print(s); } }\n// END: header\n\t\t\n// START: prog\nprog: stat+ ; // match list of statement subtrees\n// match trees like ('=' x 1) and ('print' ('+' 3 4))\nstat: ^('=' ID {print($ID.text+\" = \");} expr) {print(\"\\n\");}\n | ^('print' {print(\"print \");} expr) {print(\"\\n\");}\n ;\n// END: prog\n\t\t\t\t\n// START: expr\nexpr: ^('+' expr {print(\"+\");} expr)\n | ^('*' expr {print(\"*\");} expr)\n | ^('.' expr {print(\".\");} expr)\n | ^(VEC {print(\"[\");} expr ({print(\", \");} expr)* {print(\"]\");})\n | INT {print($INT.text);}\n | ID {print($ID.text);}\n\t;\n// END: expr\t\t\n使用ANTLR4构建AST\nANTLR4构建AST的方式与ANTLR4有很大的不同,ANTLR4的解析器会自动返回'语法解析树', 解析树的节点类型含有全部的语法规则名和词法规则名。并且, ANLTR4提供了遍历解析树的‘listener’和'visitor'。想要进一步构建AST或根据解析树做其他操作的话,可以直接使用'listener'或'visitor',在遍历解析树的同时添加自己的操作逻辑即可。\n注意,ANTLR4的语法文件以.g4结尾,语法和ANLTR4也不一样。具体的请参照\"The Definitive ANTLR 4 Reference\"。上面的VecMath.g用ANTLR4的语法重写之后的内容见下面\"VecMath ANTLR4语法\"。对于上节的\"VecMath输入\", ANTLR4 解析器产生的\"语法解析树\"见图2。对比图1和图2,AST比\"语法解析树\"要简洁很多。\nVecMath ANTLR4语法\ngrammar VecMath;\n\nprog : stat+ ;\nstat : ID '=' expr\n | 'print' expr\n ;\n\t\t\t\t\nexpr : multExpr ('+' multExpr)* ;\nmultExpr: primary (('*'|'.') primary)* ;\nprimary : INT\n | ID\n | '[' expr (',' expr)* ']'\n ;\n\t\t\t\t\t\t\t\t\t\t\nID : 'a'..'z'+ ;\nINT: '0'..'9'+ ;\nWS: (' '|'\\r'|'\\n')+ -> skip ;\n\n\n图2\n\n使用ANTLR4构建AST访问者\nANTLR4并没有提供对AST访问的\"树文法\",都得靠自己。\n结论\n所以,ANTLR4中是没有树文法的。不过有了\"解析树\"后,想要生成AST就不难了。有了AST后,想要遍历AST的话,也要充分发挥\"自己动手\"的精神,手工写遍历方法。\n","id":"https://fetchadd.github.io/blogs/lip/","title":"笔记: 编程语言实现模式-树文法"},"https://fetchadd.github.io/zh/":{"body":"","id":"https://fetchadd.github.io/zh/","title":""}},"docInfo":{"https://fetchadd.github.io/":{"body":0,"title":0},"https://fetchadd.github.io/about/":{"body":4,"title":1},"https://fetchadd.github.io/archives/":{"body":0,"title":0},"https://fetchadd.github.io/blogs/":{"body":0,"title":1},"https://fetchadd.github.io/blogs/dot/":{"body":80,"title":3},"https://fetchadd.github.io/blogs/lip/":{"body":1031,"title":8},"https://fetchadd.github.io/zh/":{"body":0,"title":0}},"length":7},"lang":"Chinese"};