Table of Contents

Laborator 3 - Jison

Jison este un generator de parsere pentru javascript. Acesta are sintaxa similara cu Flex si Yacc.

Instalarea Jison

Instalarea jison se poate face fie local in directorul proiectului folosind

npm install jison

fie global folosind

npm install -g jison

Lexer

npm install -g jison-lex

Exemplu

O să construim cu ajutorul unui lexer, un program simplu care calculează suma mai multor numere.

Pentru început, definim lexerul:

sum.lex
%%
[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:

Construim programul de bază. Vom realiza un parser, folosindu-ne de lexerul anterior.

main.lex
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();
Exercițiu

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.