Jison este un generator de parsere pentru javascript. Acesta are sintaxa similara cu Flex si Yacc.
Instalarea jison se poate face fie local in directorul proiectului folosind
npm install jison
fie global folosind
npm install -g jison
npm install -g jison-lex
O să construim cu ajutorul unui lexer, un program simplu care calculează suma mai multor numere.
Pentru început, definim lexerul:
%% [0-9]+ return 'NUMBER'; '+' return '+'; ' '+ return 'SPACE'; %%
Generăm un fișier js din acesta:
jison-lex sum.lex
Observăm că a apărut un nou fișier numit sum.js
.
Acest fișier trebuie modificat astfel:
parseError
și se lasă doar throw new Error(str);
exports.nume_fisier = nume_fisier
, unde nume_fisier
reprezintă numele fișierului anterior, fără extensie; în cazul nostru, sum
.Construim programul de bază. Vom realiza un parser, folosindu-ne de lexerul anterior.
var lexer = require("./sum.js").sum; lexer.setInput("10+12+1"); function my_sum () { var sum = 0; var i; for (i = 0; i < tokens.length; i++) if (tokens[i][0] == 'NUMBER') sum = sum + tokens[i][1]; console.log("Sum = " + sum); } var token; var tokens = []; do { token = lexer.lex(); if (token != 'SPACE' && token != lexer.EOF) tokens.push([token, parseInt(lexer.yytext)]); } while (token != lexer.EOF); my_sum();
Construiți un lexer pentru următoarea gramatică:
xml: <ID parameters>xml</ID> parameters: parameter parameters |; parameter: ID = "TEXT" TEXT: '{' ALFANUMERIC '}'
Realizați în js un parser pentru aceasta.