Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %lex
- %%
- \r\n|\r|\n return 'ENDL';
- \s+ ;
- [0-9]+("."[0-9]+)?\b return 'DIGIT';
- sin return 'SIN';
- [a-z] return 'VAR';
- <<EOF>> return 'EOF';
- . return yytext;
- /lex
- %start exp2
- %%
- exp2: exp EOF {return process($1);}
- ;
- exp : v ENDL e { $$ = { type: 'exp', children: [$1, {type: 'ENDL' }, $3] }; }
- | e { $$ = { type: 'exp', children: [$1] }; }
- ;
- v : VAR '=' e ';' { $$ = { type: 'v', children: [{type: 'VAR'}, { type: '=' }, $3, {type: ';'}] }; }
- | v ENDL VAR '=' e ';' { $$ = { type: 'v', children: [$1, { type: 'ENDL' },{type : 'VAR'}, { type: '=' },$5, {type: ';'}]}; }
- ;
- e : e '+' r { $$ = { type: 'e', children: [$1, { type: '+' }, $3] }; }
- | e '-' r { $$ = { type: 'e', children: [$1, { type: '-' }, $3] }; }
- | r { $$ = { type: 'e', children: [$1] }; }
- ;
- r : '(' e ')' { $$ = { type: 'r', children: [$2] }; }
- | n { $$ = { type: 'r', children: [$1] }; }
- ;
- n : d { $$ = { type: 'n', children: [$1] }; }
- | SIN '(' e ')' { $$ = { type: 'n', children: [ {type: 'SIN'},{type: '(' }, $3,{type:')'}] }; }
- | u {$$ = {type: 'n', children:[$1]};}
- ;
- d : DIGIT { $$ = { type: 'd', value: $1 }; }
- ;
- u : VAR { $$ = { type: 'u', value: $1 }; }
- ;
- %%
- var Arr = [];
- function indent(ind) {
- var res = "";
- for (var i = 0; i < ind; i++) {
- res += " ";
- }
- return res;
- }
- function drawtree(node, ind) {
- var ENDL = "\n";
- var res = "";
- if (node.type == 'd' || node.type == 'u' ) {
- res += indent(ind) + node.type + " : " + node.value + ENDL;
- } else if (node.type == '-' || node.type == '+'||node.type == 'VAR'|| node.type == 'ENDL'|| node.type == '='|| node.type == ';' || node.type == 'SIN' || node.type == '(' || node.type == ')') {
- res += indent(ind) + node.type + ENDL;
- } else {
- res += indent(ind) + node.type + ENDL;
- for (var i = 0; i < node.children.length; i++) {
- res += drawtree(node.children[i], ind + 1);
- }
- }
- return res;
- }
- function process(node) {
- var ENDL = "\n";
- var res = "";
- res += "Grammar Tree:" + ENDL;
- res += ENDL;
- res += drawtree(node, 0);
- res += ENDL;
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement