Chinaunix

标题: (不用回复了................)能不能有比这个更好的写法?? [打印本页]

作者: zqy1005    时间: 2010-06-27 14:57
标题: (不用回复了................)能不能有比这个更好的写法??
本帖最后由 zqy1005 于 2010-06-27 20:18 编辑

高手和前辈指教下,說下 下面这段 更好的写法。。。
谢谢各位了

  1. yylex()
  2. {
  3.     int nstr;
  4.     extern int yyprevious;
  5.    
  6.     while ( (nstr = yylook()) >= 0)
  7.     yyfussy:
  8.     switch(nstr)
  9.     {
  10.         case 0:
  11.                 if (yywrap()) return(0); break;
  12.         
  13.         case 1:
  14.                 break;
  15.         
  16.         case 2:
  17.                 {yylval.vInt = 1; return DEBUG;}
  18.                 break;
  19.         
  20.         case 3:
  21.                 {yylval.vInt = 0; return DEBUG;}
  22.                 break;
  23.                
  24.         case 4:
  25.                 lua_linenumber++;
  26.                 break;
  27.                
  28.         case 5:
  29.                 break;
  30.         
  31.         case 6:
  32.                 return LOCAL;
  33.                 break;
  34.                
  35.         case 7:
  36.                 return IF;
  37.                 break;
  38.         case 8:
  39.                 return THEN;
  40.                 break;
  41.                
  42.         case 9:
  43.                 return ELSE;
  44.                 break;
  45.                
  46.         case 10:
  47.                 return ELSEIF;
  48.                 break;
  49.                
  50.         case 11:
  51.                 return WHILE;
  52.                 break;
  53.                
  54.         case 12:
  55.                 return DO;
  56.                 break;
  57.                
  58.         case 13:
  59.                 return REPEAT;
  60.                 break;
  61.                
  62.         case 14:
  63.                 return UNTIL;
  64.                 break;
  65.                
  66.         case 15:
  67.                 {
  68.                     yylval.vWord = lua_nfile-1;
  69.                     return FUNCTION;
  70.                 }
  71.                 break;
  72.                
  73.         case 16:
  74.                 return END;
  75.                 break;
  76.                
  77.         case 17:
  78.                 return RETURN;
  79.                 break;
  80.                
  81.         case 18:
  82.                 return LOCAL;
  83.                 break;
  84.                
  85.         case 19:
  86.                 return NIL;
  87.                 break;
  88.                
  89.         case 20:
  90.                 return AND;
  91.                 break;
  92.                
  93.         case 21:
  94.                 return OR;
  95.                 break;
  96.                
  97.         case 22:
  98.                 return NOT;
  99.                 break;
  100.                
  101.         case 23:
  102.                 return NE;
  103.                 break;
  104.                
  105.         case 24:
  106.                 return LE;
  107.                 break;
  108.                
  109.         case 25:
  110.                 return GE;
  111.                 break;
  112.                
  113.         case 26:
  114.                 return CONC;
  115.                 break;
  116.                
  117.         case 27:
  118.             
  119.         case 28:
  120.                 {
  121.                     yylval.vWord = lua_findenclosedconstant (yytext);
  122.                     return STRING;
  123.                 }
  124.                 break;
  125.         case 29:
  126.             
  127.         case 30:
  128.             
  129.         case 31:
  130.             
  131.         case 32:
  132.                 {
  133.                     yylval.vFloat = atof(yytext);
  134.                     return NUMBER;
  135.                 }
  136.                 break;
  137.                
  138.         case 33:
  139.                 {
  140.                     yylval.vWord = lua_findsymbol (yytext);
  141.                     return NAME;
  142.                 }
  143.                 break;
  144.                
  145.         case 34:
  146.                 return  *yytext;
  147.                 break;
  148.                
  149.         case -1:
  150.                 break;
  151.                
  152.         default:
  153.                 fprintf(yyout,"bad switch yylook %d",nstr);
  154.     }
  155.    
  156.     return(0);
  157. }
复制代码
大家看下原版的来自神奇的国度--巴西  的code style ,太tm神奇了

  1. yylex(){
  2. int nstr; extern int yyprevious;
  3. while((nstr = yylook()) >= 0)
  4. yyfussy: switch(nstr){
  5. case 0:
  6. if(yywrap()) return(0); break;
  7. case 1:
  8.                                 ;
  9. break;
  10. case 2:
  11.                         {yylval.vInt = 1; return DEBUG;}
  12. break;
  13. case 3:
  14.                         {yylval.vInt = 0; return DEBUG;}
  15. break;
  16. case 4:
  17.                                 lua_linenumber++;
  18. break;
  19. case 5:
  20.                                 ;
  21. break;
  22. case 6:
  23.                                 return LOCAL;
  24. break;
  25. case 7:
  26.                                 return IF;
  27. break;
  28. case 8:
  29.                                 return THEN;
  30. break;
  31. case 9:
  32.                                 return ELSE;
  33. break;
  34. case 10:
  35.                         return ELSEIF;
  36. break;
  37. case 11:
  38.                                 return WHILE;
  39. break;
  40. case 12:
  41.                                 return DO;
  42. break;
  43. case 13:
  44.                         return REPEAT;
  45. break;
  46. case 14:
  47.                                 return UNTIL;
  48. break;
  49. case 15:
  50.                         {
  51.                                          yylval.vWord = lua_nfile-1;
  52.                                          return FUNCTION;
  53.                                         }
  54. break;
  55. case 16:
  56.                                 return END;
  57. break;
  58. case 17:
  59.                                 return RETURN;
  60. break;
  61. case 18:
  62.                                 return LOCAL;
  63. break;
  64. case 19:
  65.                                 return NIL;
  66. break;
  67. case 20:
  68.                                 return AND;
  69. break;
  70. case 21:
  71.                                 return OR;
  72. break;
  73. case 22:
  74.                                 return NOT;
  75. break;
  76. case 23:
  77.                                 return NE;
  78. break;
  79. case 24:
  80.                                 return LE;
  81. break;
  82. case 25:
  83.                                 return GE;
  84. break;
  85. case 26:
  86.                                 return CONC;
  87. break;
  88. case 27:
  89.                         case 28:
  90.                       {
  91.                                        yylval.vWord = lua_findenclosedconstant (yytext);
  92.                                        return STRING;
  93.                                       }
  94. break;
  95. case 29:
  96. case 30:
  97. case 31:
  98. case 32:
  99. {
  100.                                         yylval.vFloat = atof(yytext);
  101.                                         return NUMBER;
  102.                                        }
  103. break;
  104. case 33:
  105.                {
  106.                                         yylval.vWord = lua_findsymbol (yytext);
  107.                                         return NAME;
  108.                                        }
  109. break;
  110. case 34:
  111.                                 return  *yytext;
  112. break;
  113. case -1:
  114. break;
  115. default:
  116. fprintf(yyout,"bad switch yylook %d",nstr);
  117. } return(0); }
复制代码

作者: prolj    时间: 2010-06-27 15:39
lua?
作者: zqy1005    时间: 2010-06-27 15:45
本帖最后由 zqy1005 于 2010-06-27 15:50 编辑

恩 。。 是的

lua 的sourcecode
巴西佬而且還不用英语寫注释 真tm操蛋

p姨, 这个有没有更好的写法呢??
作者: maxxfire    时间: 2010-06-27 16:26
没必要看这个,这不是源码,是lex,yacc生成文件。。
作者: prolj    时间: 2010-06-27 16:29
我没看lua的代码,有人说让我看看。
作者: zqy1005    时间: 2010-06-27 16:37
我没看lua的代码,有人说让我看看。
prolj 发表于 2010-06-27 04:29 PM



    code style 太tm痛苦了。。 巴西佬不知道怎么习惯这样的。。。
作者: zqy1005    时间: 2010-06-27 16:38
没必要看这个,这不是源码,是lex,yacc生成文件。。
maxxfire 发表于 2010-06-27 04:26 PM



    是源码中的一部分  

     我就是想知道有没有比这个好的写法
作者: prolj    时间: 2010-06-27 16:54
macro比magic number就好。
作者: maxxfire    时间: 2010-06-27 17:05
呵呵,人家说好的代码看起来像诗。
诗难度高,不过起码变量要命名好,代码缩进好,模块清晰分类好,另外多写代码自然会写好。。
作者: haizeng    时间: 2010-06-27 17:06
这个有点难!
作者: ah13k    时间: 2010-06-27 17:41
什么东西
作者: zqy1005    时间: 2010-06-27 17:45
呵呵,人家说好的代码看起来像诗。
诗难度高,不过起码变量要命名好,代码缩进好,模块清晰分类好,另外多 ...
maxxfire 发表于 2010-06-27 05:05 PM



    從Lua的sourcecode 来說 我没有读到诗&美好的感觉。


   但是功却是很强悍 哈哈
作者: chinesedragon    时间: 2010-06-27 18:57
看着有点晕
作者: 没本    时间: 2010-06-27 19:12
你确定这是最新版本的lua源码?我用的lua怎么很容易读。
作者: zqy1005    时间: 2010-06-27 20:10
本帖最后由 zqy1005 于 2010-06-27 20:17 编辑

我沒說版本 谢谢。
我讨论的是版本麼?
搞清楚重点 谢谢
作者: 没本    时间: 2010-06-27 20:24
本帖最后由 没本 于 2010-06-27 20:25 编辑

Lua的代码很容易读,而且早都自己用ANSI C实现语法分析了,不再借助外部工具。想批Lua的话,楼主还是多看看他的代码吧。记得我还改过Lua支持中文变量(闲得无聊)。
作者: zqy1005    时间: 2010-06-27 20:27
回复 16# 没本


    搞清楚重点 谢谢  理解不了中文多學點语文 对你无语
作者: 没本    时间: 2010-06-27 20:33
回复 17# zqy1005


    巴西人的code style不好,我的语文不好。你都十全十美了还来发贴做什么,来秀你的品味异于常人么?
作者: starwing83    时间: 2010-06-27 20:41
………………现在lua的语法分析已经是手写的了吧?
作者: zhaohongjian000    时间: 2010-06-27 22:14
见谁喷谁,找存在感?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2