{"id":290,"date":"2009-11-20T23:10:24","date_gmt":"2009-11-20T15:10:24","guid":{"rendered":"http:\/\/115.29.108.60\/?p=290"},"modified":"2011-09-26T21:45:55","modified_gmt":"2011-09-26T13:45:55","slug":"lex","status":"publish","type":"post","link":"http:\/\/115.29.108.60\/?p=290","title":{"rendered":"Lex"},"content":{"rendered":"<p>\/\/ Lex.cpp : Defines the entry point for the console application.<br \/>\n\/\/<\/p>\n<p>#include &#8220;stdafx.h&#8221;<br \/>\n#include &lt;stdio.h&gt;<br \/>\n#include &lt;string.h&gt;<br \/>\n#include &lt;ctype.h&gt;<br \/>\n#include &lt;process.h&gt;<\/p>\n<p>\/\/P83 3.4.2\u4fdd\u7559\u5b57\u548c\u6807\u8bc6\u7b26\u7684\u8bc6\u522b<br \/>\n\/\/\u521d\u59cb\u5316\u65f6\u5c31\u5c06\u5404\u4e2a\u4fdd\u7559\u5b57\u586b\u5165\u7b26\u53f7\u8868\u4e2d<br \/>\nconst char* KEYWORD[6] = {&#8220;begin&#8221;, &#8220;if&#8221;, &#8220;then&#8221;, &#8220;while&#8221;, &#8220;do&#8221;, &#8220;end&#8221;};<br \/>\nchar buffer[1024] = {0};\/\/\u8f93\u5165\u7f13\u51b2\u533a<br \/>\nchar token[10] = {0};\/\/\u8bcd\u7d20\uff0c\u6570\u7ec4\u5927\u5c0f\u9650\u5236\u7740\u6807\u8bc6\u7b26\u7684\u957f\u5ea6\u3002<br \/>\nint forward = 0, syn = -1;\/\/\u6e38\u6807\u548c\u79cd\u522b\u7801<\/p>\n<p>void analyzer();<\/p>\n<p>int main(int argc, char* argv[])<br \/>\n{<br \/>\n\u00a0\/\/\u8f93\u5165\uff0c\u4ee5#\u7ed3\u675f\u3002<br \/>\n\u00a0printf(&#8220;\u8bf7\u8f93\u5165\uff1a\uff08\u793a\u4f8b\u8f93\u5165begin x:=9;if x&gt;0 then x:=2*x+1\/3;end#\uff09\\n&#8221;);<br \/>\n\u00a0char input;<br \/>\n\u00a0do<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0input = getchar();<br \/>\n\u00a0\u00a0buffer[forward++] = input;<br \/>\n\u00a0}<br \/>\n\u00a0while(input != &#8216;#&#8217;);<\/p>\n<p>\u00a0\/\/\u5206\u6790\uff0c\u4ee5#\u7684\u79cd\u522b\u78010\u7ed3\u675f\u3002<br \/>\n\u00a0forward = 0;<br \/>\n\u00a0do<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0analyzer();<br \/>\n\u00a0\u00a0printf(&#8220;(%d, %s)\\n&#8221;, syn, token);<br \/>\n\u00a0}<br \/>\n\u00a0while(syn != 0);<br \/>\n\u00a0system(&#8220;pause&#8221;);<br \/>\n\u00a0return 0;<br \/>\n}<\/p>\n<p>void analyzer()<br \/>\n{<br \/>\n\u00a0memset(token, &#8216;\\0&#8217;, sizeof(token));\/\/\u6e05\u7a7a\u524d\u4e00\u4e2a\u5df2\u5206\u6790\u7684\u8bcd\u7d20<br \/>\n\u00a0char ch = buffer[forward++];\/\/\u5f53\u524d\u5206\u6790\u7684\u5b57\u7b26<br \/>\n\u00a0while(isspace(ch))\/\/\u5ffd\u7565\u7a7a\u683c<br \/>\n\u00a0\u00a0ch = buffer[forward++];<br \/>\n\u00a0switch(ch)<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0case &#8216;+&#8217;:<br \/>\n\u00a0\u00a0\u00a0token[0] = ch;<br \/>\n\u00a0\u00a0\u00a0syn = 13;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0case &#8216;-&#8216;:<br \/>\n\u00a0\u00a0\u00a0token[0] = ch;<br \/>\n\u00a0\u00a0\u00a0syn = 14;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0case &#8216;*&#8217;:<br \/>\n\u00a0\u00a0\u00a0token[0] = ch;<br \/>\n\u00a0\u00a0\u00a0syn = 15;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0case &#8216;\/&#8217;:<br \/>\n\u00a0\u00a0\u00a0token[0] = ch;<br \/>\n\u00a0\u00a0\u00a0syn = 16;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0case &#8216;:&#8217;:<br \/>\n\u00a0\u00a0\u00a0token[0] = ch;<br \/>\n\u00a0\u00a0\u00a0if(buffer[forward] == &#8216;=&#8217;)<br \/>\n\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0forward++;<br \/>\n\u00a0\u00a0\u00a0\u00a0token[1] = &#8216;=&#8217;;<br \/>\n\u00a0\u00a0\u00a0\u00a0syn = 18;<br \/>\n\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0else<br \/>\n\u00a0\u00a0\u00a0\u00a0syn = 17;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0case &#8216;&lt;&#8216;:<br \/>\n\u00a0\u00a0\u00a0token[0] = ch;<br \/>\n\u00a0\u00a0\u00a0if(buffer[forward] == &#8216;&gt;&#8217;)<br \/>\n\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0forward++;<br \/>\n\u00a0\u00a0\u00a0\u00a0token[1] = &#8216;&gt;&#8217;;<br \/>\n\u00a0\u00a0\u00a0\u00a0syn = 21;<br \/>\n\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0else if(buffer[forward] == &#8216;=&#8217;)<br \/>\n\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0forward++;<br \/>\n\u00a0\u00a0\u00a0\u00a0token[1] = &#8216;=&#8217;;<br \/>\n\u00a0\u00a0\u00a0\u00a0syn = 22;<br \/>\n\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0else<br \/>\n\u00a0\u00a0\u00a0\u00a0syn = 20;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0case &#8216;&gt;&#8217;:<br \/>\n\u00a0\u00a0\u00a0token[0] = ch;<br \/>\n\u00a0\u00a0\u00a0if(buffer[forward] == &#8216;=&#8217;)<br \/>\n\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0forward++;<br \/>\n\u00a0\u00a0\u00a0\u00a0token[1] = &#8216;=&#8217;;<br \/>\n\u00a0\u00a0\u00a0\u00a0syn = 24;<br \/>\n\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0else<br \/>\n\u00a0\u00a0\u00a0\u00a0syn = 23;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0case &#8216;=&#8217;:<br \/>\n\u00a0\u00a0\u00a0token[0] = ch;<br \/>\n\u00a0\u00a0\u00a0syn = 25;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0case &#8216;;&#8217;:<br \/>\n\u00a0\u00a0\u00a0token[0] = ch;<br \/>\n\u00a0\u00a0\u00a0syn = 26;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0case &#8216;(&#8216;:<br \/>\n\u00a0\u00a0\u00a0token[0] = ch;<br \/>\n\u00a0\u00a0\u00a0syn = 27;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0case &#8216;)&#8217;:<br \/>\n\u00a0\u00a0\u00a0token[0] = ch;<br \/>\n\u00a0\u00a0\u00a0syn = 28;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0case &#8216;#&#8217;:<br \/>\n\u00a0\u00a0\u00a0token[0] = ch;<br \/>\n\u00a0\u00a0\u00a0syn = 0;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0default:<br \/>\n\u00a0\u00a0\u00a0int i = 0;<br \/>\n\u00a0\u00a0\u00a0if(isdigit(ch))\/\/\u6570\u5b57<br \/>\n\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0while(isdigit(ch))<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0token[i] = ch;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0ch = buffer[forward++];<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0i++;<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0forward&#8211;;<br \/>\n\u00a0\u00a0\u00a0\u00a0syn = 11;<br \/>\n\u00a0\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0else if(isalpha(ch))\/\/\u5b57\u7b26\u7ec4\u6210\u4fdd\u7559\u5b57\u6216\u6807\u8bc6\u7b26<br \/>\n\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0while(isalnum(ch))<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0token[i] = ch;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0ch = buffer[forward++];<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0i++;<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0forward&#8211;;<br \/>\n\u00a0\u00a0\u00a0\u00a0for(int j = 0; j &lt; 6; j++)<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0if(strcmp(token, KEYWORD[j]) == 0)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0syn = j + 1;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0syn = 10;<br \/>\n\u00a0\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0\u00a0}<br \/>\n\u00a0}<br \/>\n}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\/\/ Lex.cpp : Defines the entry point for the console ap [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25,20],"tags":[],"class_list":["post-290","post","type-post","status-publish","format-standard","hentry","category-tools","category-cplusplus"],"_links":{"self":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts\/290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=290"}],"version-history":[{"count":3,"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts\/290\/revisions"}],"predecessor-version":[{"id":888,"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts\/290\/revisions\/888"}],"wp:attachment":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=290"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}