Advertisement
Guest User

Untitled

a guest
Apr 27th, 2015
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. %lex
  2. %%
  3.  
  4. \r\n|\r|\n            return 'ENDL';
  5. \s+ ;
  6. [0-9]+("."[0-9]+)?\b  return 'DIGIT';
  7. sin                   return 'SIN';
  8. [a-z]                 return 'VAR';
  9. <<EOF>>               return 'EOF';
  10. .                     return yytext;
  11.  
  12. /lex
  13.  
  14. %start exp2
  15.  
  16. %%
  17. exp2: exp EOF {return process($1);}
  18.     ;
  19. exp : v ENDL e  { $$ = { type: 'exp', children: [$1, {type: 'ENDL' }, $3] }; }
  20.     | e  { $$ = { type: 'exp', children: [$1] }; }
  21.     ;
  22. v   : VAR '=' e ';' { $$ = { type: 'v', children: [{type: 'VAR'}, { type: '=' }, $3, {type: ';'}] }; }
  23.     | v ENDL VAR '=' e ';'  { $$ = { type: 'v', children: [$1, { type: 'ENDL' },{type : 'VAR'}, { type: '=' },$5, {type: ';'}]}; }
  24.     ;
  25. e   : e '+' r  { $$ = { type: 'e', children: [$1, { type: '+' }, $3] }; }
  26.     | e '-' r  { $$ = { type: 'e', children: [$1, { type: '-' }, $3] }; }
  27.     | r        { $$ = { type: 'e', children: [$1] }; }
  28.     ;
  29.  
  30. r   : '(' e ')'   { $$ = { type: 'r', children: [$2] }; }
  31.     | n          { $$ = { type: 'r', children: [$1] }; }
  32.     ;
  33.  
  34. n   : d { $$ = { type: 'n', children: [$1] }; }
  35.     | SIN '(' e ')' { $$ = { type: 'n', children: [ {type: 'SIN'},{type: '(' }, $3,{type:')'}] }; }
  36.     | u {$$ = {type: 'n', children:[$1]};}
  37.     ;
  38. d   : DIGIT { $$ = { type: 'd', value: $1 }; }
  39.     ;
  40. u   : VAR { $$ = { type: 'u', value: $1 }; }
  41.     ;
  42. %%
  43.  
  44. var Arr = [];
  45.  
  46. function indent(ind) {
  47.   var res = "";
  48.   for (var i = 0; i < ind; i++) {
  49.     res += " ";
  50.   }
  51.   return res;
  52. }
  53.  
  54. function drawtree(node, ind) {
  55.   var ENDL = "\n";
  56.   var res = "";
  57.   if (node.type == 'd' || node.type == 'u' ) {
  58.     res += indent(ind) + node.type + " : " + node.value + ENDL;
  59.   } else if (node.type == '-' || node.type == '+'||node.type == 'VAR'|| node.type == 'ENDL'|| node.type == '='|| node.type == ';' || node.type == 'SIN' || node.type == '(' || node.type == ')') {
  60.     res += indent(ind) + node.type + ENDL;
  61.   } else {
  62.     res += indent(ind) + node.type + ENDL;
  63.     for (var i = 0; i < node.children.length; i++) {
  64.       res += drawtree(node.children[i], ind + 1);
  65.     }
  66.   }
  67.   return res;
  68. }
  69.  
  70.  
  71. function process(node) {
  72.   var ENDL = "\n";
  73.   var res = "";
  74.   res += "Grammar Tree:" + ENDL;
  75.   res += ENDL;
  76.   res += drawtree(node, 0);
  77.   res += ENDL;
  78.   return res;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement