锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩在线精品,中日韩男男gay无套,国产亚洲一级http://m.shnenglu.com/woaidongmao/category/8306.html鏂囩珷鍧囨敹褰曡嚜浠栦漢鍗氬錛屼絾涓嶅枩鏍囬鍓嶅姞-[杞創(chuàng)]錛屽洜鍏朵笐闄嬶紝瑙佽皡錛亊zh-cnFri, 19 Sep 2008 17:23:05 GMTFri, 19 Sep 2008 17:23:05 GMT60緇堜簬鎴愬姛閰嶇疆lex鍜寉acc鐨勫伐鍏稰arser Generatorhttp://m.shnenglu.com/woaidongmao/archive/2008/09/20/62313.html鑲ヤ粩鑲ヤ粩Fri, 19 Sep 2008 16:16:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/09/20/62313.htmlhttp://m.shnenglu.com/woaidongmao/comments/62313.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/09/20/62313.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/62313.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/62313.html鐢ㄧ殑VC 2005, 鍜屽師鏉?span lang="EN-US">VC 6鐨勮緗」瀵瑰簲涓嶄笂, 寰堝鍗婂ぉ閮芥壘涓嶅埌.濂戒笉瀹規(guī)槗鎵懼叏浜?span lang="EN-US">, 鍗磋繕鏄紪璇戝嚭閿?span lang="EN-US">.
鏈鍚?span lang="EN-US">,鍙ソ閫夋嫨鍐嶈涓涓?span lang="EN-US">VC6, 鍡?span lang="EN-US">, 涓や釜VC, 涓嶉敊.

鍏堜粙緇嶄竴涓?span lang="EN-US">Parser Generator,涓婚〉涓嬭澆:http://www.bumblebeesoftware.com/downloads.htm
Parser Generator is a YACC and Lex programming tool for Windows. As well as including a Graphical User Interace, the software also includes two versions of YACC and Lex, called AYACC and ALex. Parser Generator is able to generate C, C++ and Java parsers and lexical analysers. This includes both Unicode and Multibyte Character Set (MBCS) variants. In your applications you can create multiple, thread safe, instances of these parsers and lexical analysers.

        涓嬮潰璇翠竴涓?span lang="EN-US">windows鐜涓?span lang="EN-US">parser generator鍜?span lang="EN-US">vc++鐨勫悇欏歸厤緗?span lang="EN-US">

錛堜竴錛?span lang="EN-US">parser generator鐨勭幆澧冭緗?span lang="EN-US">

         瀹夎濂?span lang="EN-US">parser generator錛屾墦寮闆嗘垚寮鍙戠幆澧冿紝鐐歸」鐩?span lang="EN-US">Project鑿滃崟錛屽湪涓嬫媺鑿滃崟涓?span lang="EN-US">LibBuilder錛屽脊鍑?span lang="EN-US">LibBuilder瀵硅瘽妗嗛夋嫨灞炴ф寜閽紝寮瑰嚭compiler properties 瀵硅瘽妗嗭細(xì)
   Name
閫夋嫨Visual C++ (32-bit)

   Directory :msvc32
   options:

渚濇涓?vc++鐗堟湰(Versoin 6)
鏄惁鏀寔unicode鐮併?span lang="EN-US">(閫夋嫨榛樿)
鏄惁鎶?span lang="EN-US">w_char_t浣滀負(fù)鍐呭緩綾誨瀷銆?span lang="EN-US">(閫夋嫨榛樿)

涓嬭竟鏄?span lang="EN-US">VC鐨勫悇縐嶇洰褰曪細(xì)
渚濇涓?span lang="EN-US">
Compiler Bin Directory (C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\BIN

Compiler Bin Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\COMMON\MSDEV98\BIN

Compiler Include Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\INCLUDE

Compiler Include Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\MFC\INCLUDE

Compiler Library Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\LIB

Compiler Library Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\MFC\LIB

    娉ㄦ剰錛氱紪璇戝櫒瀹夎鐩綍鏍規(guī)嵁涓漢瀹夎鐩綍闇瑕佸仛鐩稿簲鐨勮皟鏁淬傛墍鏈夌殑榪欎簺璁劇疆瀹屾垚涔嬪悗鐐?span lang="EN-US">ok銆?span lang="EN-US">

       鏈鍚庝竴姝?span lang="EN-US">,閰嶇疆parser generator鐨?span lang="EN-US">properties,濡傚浘鍗沖彲:

clip_image001



     

     榪斿洖LibBuilder銆傜偣Build灝卞彲浠ョ紪璇?span lang="EN-US">vc++浣跨敤鐨?span lang="EN-US">lex涓?span lang="EN-US">yacc鐨?span lang="EN-US">lib搴撱?span lang="EN-US">

            娉?span lang="EN-US">:鎴戝弬鑰?span lang="EN-US">Vs 2003.net鐨勮緗?span lang="EN-US">,鍦?span lang="EN-US">VC 2005涓嬭繘琛岀浉搴旇緗?span lang="EN-US">, 緇撴灉lex涓?span lang="EN-US">yacc鐨?span lang="EN-US">lib搴撴病鑳界紪璇戦氳繃, 鍙兘鏄垜璁劇疆閿欒, 涓嶅簲璇ユ槸灝氫笉鍏煎鐨勯棶棰樺惂.

   
鐢熸垚搴撴枃浠跺湪杞歡瀹夎鐩綍涓嬬殑D:\Parser Generator 2\Cpp\Lib\msvc32鐩綍涓嬨?span lang="EN-US">

錛堜簩錛?span lang="EN-US">vc++鐜鐨勮緗?span lang="EN-US">

1.鐩綍璁劇疆

         涓轟簡鍦?span lang="EN-US">VC++涓彲浠ユ壘鍒板寘鍚枃浠?span lang="EN-US">yacc.h鍜?span lang="EN-US">lex.h浠ュ強(qiáng)YACC鍜?span lang="EN-US">Lex鐨勫簱鏂囦歡錛岄渶瑕佸VC++榪涜鐩稿叧鐨勭洰褰曡緗?span lang="EN-US">
錛?span lang="EN-US">1錛?span lang="EN-US">       閫夋嫨Tools鑿滃崟涓殑Options鍛戒護(hù)錛屾墦寮Options瀵硅瘽妗嗐?span lang="EN-US">
錛?span lang="EN-US">2錛?span lang="EN-US">       閫夋嫨Directories閫夐」鍗°?span lang="EN-US">
錛?span lang="EN-US">3錛?span lang="EN-US">       鍦?span lang="EN-US">Show Directories for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Include Files銆?span lang="EN-US">
           鍦?span lang="EN-US">Directories妗嗕腑錛岀偣鍑?yán)L渶鍚庣殑絀虹洰褰曪紝騫跺~鍏?span lang="EN-US"> F:\PARGEN\CPP\INCLUDE(鏍規(guī)嵁涓漢瀹夎鐩綍闇瑕佸仛鐩稿簲鐨勮皟鏁?span lang="EN-US">)
錛?span lang="EN-US">4錛?span lang="EN-US">       鍦?span lang="EN-US">Show Directories for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Library Files銆?span lang="EN-US">
           鍦?span lang="EN-US">Directories妗嗕腑錛岀偣鍑?yán)L渶鍚庣殑絀虹洰褰曪紝騫跺~鍏?span lang="EN-US">F:\PARGEN\CPP\LIB\MSVC32
錛?span lang="EN-US">5錛?span lang="EN-US">       鍦?span lang="EN-US">Show Directories for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Source Files銆?span lang="EN-US">
           鍦?span lang="EN-US">Directories妗嗕腑錛岀偣鍑?yán)L渶鍚庣殑絀虹洰褰曪紝騫跺~鍏?span lang="EN-US">F:\PARGEN\CPP\SOURCE
錛?span lang="EN-US">6錛?span lang="EN-US">       鐐瑰嚮OK鎸夐挳,Options瀵硅瘽妗嗗皢鎺ュ彈璁劇疆騫跺叧闂?span lang="EN-US">

2錛庨」鐩緗?span lang="EN-US">
        瀵逛簬姣忎釜VC++欏圭洰錛岄兘闇鍦?span lang="EN-US">VC++涓繘琛屼互涓嬭緗?/span>錛屼互浣?span lang="EN-US">VC++鍙互浠庣壒瀹氱殑搴撲腑鎺ュ彈LEX鍜?span lang="EN-US">YACC鎵闇瑕佺殑鍑芥暟鍜屽彉閲?span lang="EN-US">
錛?span lang="EN-US">1錛?span lang="EN-US">       閫夋嫨Project鑿滃崟涓殑Settings鍛戒護(hù)錛屾墦寮Project Settings瀵硅瘽妗嗐?span lang="EN-US">
錛?span lang="EN-US">2錛?span lang="EN-US">       鍦?span lang="EN-US">Settings for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Win32 Debug銆?span lang="EN-US">
錛?span lang="EN-US">3錛?span lang="EN-US">       閫夋嫨C/C++閫夐」鍗★紝 鍦?span lang="EN-US">Category涓嬫媺鍒楄〃妗嗕腑閫夋嫨General銆?span lang="EN-US">
                 鍦?span lang="EN-US">Preprocessor Definitions妗嗕腑錛屽湪褰撳墠鏂囨湰鐨勬渶鍚庯紝杈撳叆
               
錛?span lang="EN-US" style="color: red">YYDEBUG
            娉?span lang="EN-US">:瀵瑰簲鍒?span lang="EN-US">VC 2005涓?span lang="EN-US">C/C++->Preprocessor->Preprocessor Definitions.
錛?span lang="EN-US">4錛?span lang="EN-US">       閫夋嫨Link閫夐」鍗★紝鍦?span lang="EN-US">Category涓嬫媺鍒楄〃妗嗕腑閫夋嫨General銆?span lang="EN-US">
                 鍦?span lang="EN-US">Object/Library Modules妗嗕腑錛屽湪褰撳墠鏂囨湰鐨勫悗闈紝杈撳叆yld.lib
            娉?span lang="EN-US">:VC 6涓殑Object/Library Modules瀵瑰簲鍒?span lang="EN-US">VC 2005涓?span lang="EN-US">Propert->Configuration Properties->Linker->Input->Additional Dependencies ,鎵句簡濂戒箙.clip_image002
錛?span lang="EN-US">5錛?span lang="EN-US">       鍦?span lang="EN-US">Settings for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Win32 Release銆?span lang="EN-US">
錛?span lang="EN-US">6錛?span lang="EN-US">     閲嶅絎?span lang="EN-US">4姝ョ殑宸ヤ綔銆?span lang="EN-US">
錛?span lang="EN-US">7錛?span lang="EN-US">   鐐瑰嚮OK鎸夐挳錛?span lang="EN-US">Project Settings瀵硅瘽妗嗚緗畬姣曘?span lang="EN-US">

   榪欐牱璁劇疆涔嬪悗鎴戜滑灝卞彲浠ョ敤vc++緙栬瘧Parser Generator 鐢熸垚鐨?span lang="EN-US">c鏂囦歡浜嗐傚叿浣撲負(fù)錛?span lang="EN-US">
鍏堟墦寮Parser Generator 闆嗘垚寮鍙戠幆澧冦傜偣鍑?span lang="EN-US">Project鑿滃崟錛岀偣鍑諱笅鎷夎彍鍗曚腑鐨?span lang="EN-US">ParseWizard鑿滃崟錛屼竴璺笅鍘誨緩绔嬩竴涓伐紼嬨傜劧鍚庣偣鍑?span lang="EN-US">project鑿滃崟涓嬬殑鐨?span lang="EN-US">Rebuild All銆傚湪欏圭洰鏂囦歡澶逛笅灝辯敓鎴愪簡鐩稿簲c鏂囦歡涓?span lang="EN-US">h鏂囦歡銆?span lang="EN-US">
鍐嶇敤VC++寤虹珛涓涓┖鎺у埗鍙板伐紼嬶紝鐒跺悗鎶婄敤鐢?span lang="EN-US">Parser Generator
鐢熸垚鐨?span lang="EN-US">c鏂囦歡鍜屽ご鏂囦歡鍔犲叆宸ョ▼涓傛帴鐫瀵?span lang="EN-US">VC++榪涜涓婇潰鎵璇寸殑欏圭洰璁劇疆錛岀劧鍚庡氨鍙互緙栬瘧榪愯浜嗐傛柊鎵嬪彲浠ヤ嬌鐢?span lang="EN-US">parser generator 鑷甫鐨勮寖渚嬶紝榪欐牱鏂逛究媯(gè)楠岀幆澧冪殑閰嶇疆鏄惁姝g‘.

 



鑲ヤ粩 2008-09-20 00:16 鍙戣〃璇勮
]]>
vc++涓嶻ACC鍜孡EX闆嗘垚鐜姝ラ(Parser Generator)http://m.shnenglu.com/woaidongmao/archive/2008/09/20/62312.html鑲ヤ粩鑲ヤ粩Fri, 19 Sep 2008 16:10:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/09/20/62312.htmlhttp://m.shnenglu.com/woaidongmao/comments/62312.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/09/20/62312.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/62312.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/62312.html
鍦ㄨ繖閲岋紝灝嗕粙緇嶇敱鑻卞浗Bumble-Bee Software鍏徃鐢熶駭鐨?font face="Times New Roman">Windows鐜涓嬬殑YACC鍜?font face="Times New Roman">LEX闆嗘垚鐜Parser Generator銆?font face="Times New Roman">Parser Generator鏄?font face="Times New Roman">Windows涓?font face="Times New Roman">YACC鍜?font face="Times New Roman">LEX鐨勫疄鐜般傚畠鍖呮嫭涓涓浘褰㈢敤鎴風(fēng)晫闈紝鍚屾椂鍖呮嫭YACC鍜?font face="Times New Roman">Lex涓や釜鐗堟湰錛屽垎鍒彨鍋?font face="Times New Roman">AYACC鍜?font face="Times New Roman">Alex銆?font face="Times New Roman">Parser Generator闈炲父閫傚悎浜庝笌VC++闆嗘垚銆?/font>

   鍦ㄥ畨瑁呬簡Parser Generator鍚庯紝鎵ц浠ヤ笅姝ラ錛屽嵆鍙嬌VC++緙栬瘧鍜岃繛鎺ョ敱Parser Generator浜х敓鐨勬枃浠躲?/font>

1錛庣洰褰曡緗?/font>

    鍦?font face="Times New Roman">VC++涓墽琛屼互涓嬫楠わ紝姣忎釜姝ラ鍙墽琛屼竴嬈°?/font>

錛?font face="Times New Roman">1錛?font face="Times New Roman">       閫夋嫨Tools鑿滃崟涓殑Options鍛戒護(hù)錛屽湪灞忓箷涓婂嵆浼?xì)鍑虹?font face="Times New Roman">Options瀵硅瘽妗嗐?/font>

錛?font face="Times New Roman">2錛?font face="Times New Roman">       閫夋嫨Directories閫夐」鍗°?/font>

錛?font face="Times New Roman">3錛?font face="Times New Roman">       鍦?font face="Times New Roman">Show Directories for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Include Files銆?/font>

錛?font face="Times New Roman">4錛?font face="Times New Roman">       鍦?font face="Times New Roman">Directories妗嗕腑錛岀偣鍑?yán)L渶鍚庣殑絀虹洰褰曪紝騫跺~鍏?font face="Times New Roman">Parser Generator鐨?font face="Times New Roman">include瀛愮洰褰曠殑璺緞銆?/font>

錛?font face="Times New Roman">5錛?font face="Times New Roman">       鍦?font face="Times New Roman">Show Directories for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Library Files銆?/font>

錛?font face="Times New Roman">6錛?font face="Times New Roman">       鍦?font face="Times New Roman">Directories妗嗕腑錛岀偣鍑?yán)L渶鍚庣殑絀虹洰褰曪紝騫跺~鍏?font face="Times New Roman">Parser Generator鐨?font face="Times New Roman">lib\msdev瀛愮洰褰曠殑璺緞銆?/font>

錛?font face="Times New Roman">7錛?font face="Times New Roman">       鍦?font face="Times New Roman">Show Directories for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Source Files銆?/font>

錛?font face="Times New Roman">8錛?font face="Times New Roman">       鍦?font face="Times New Roman">Directories妗嗕腑錛岀偣鍑?yán)L渶鍚庣殑絀虹洰褰曪紝騫跺~鍏?font face="Times New Roman">Parser Generator鐨?font face="Times New Roman">Source瀛愮洰褰曠殑璺緞銆?/font>

錛?font face="Times New Roman">9錛?font face="Times New Roman">       鐐瑰嚮OK鎸夐挳,Options瀵硅瘽妗嗗皢鎺ュ彈璁劇疆騫跺叧闂?/font>

VC++鍦ㄥ氨鍙互鎵懼埌鍖呭惈鏂囦歡yacc.h鍜?font face="Times New Roman">lex.h浠ュ強(qiáng)YACC鍜?font face="Times New Roman">Lex鐨勫簱鏂囦歡銆?/font>

2錛庨」鐩緗?/font>

    瀵逛簬姣忎釜VC++欏圭洰錛岄兘闇鍦?font face="Times New Roman">VC++涓墽琛屼互涓嬫楠わ細(xì)

錛?font face="Times New Roman">1錛?font face="Times New Roman">       閫夋嫨Project鑿滃崟涓殑Settings鍛戒護(hù)錛屽湪灞忓箷涓婂嵆浼?xì)鍑虹?font face="Times New Roman">Project Settings瀵硅瘽妗嗐?/font>

錛?font face="Times New Roman">2錛?font face="Times New Roman">       鍦?font face="Times New Roman">Settings for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Win32 Debug銆?/font>

錛?font face="Times New Roman">3錛?font face="Times New Roman">       閫夋嫨C/C++鏍囩銆?/font>

錛?font face="Times New Roman">4錛?font face="Times New Roman">       鍦?font face="Times New Roman">Category涓嬫媺鍒楄〃妗嗕腑閫夋嫨General銆?/font>

錛?font face="Times New Roman">5錛?font face="Times New Roman">       鍦?font face="Times New Roman">Preprocessor Definitions妗嗕腑錛屽湪褰撳墠鏂囨湰鐨勬渶鍚庯紝杈撳叆YYDEBUG銆?/font>

錛?font face="Times New Roman">6錛?font face="Times New Roman">       閫夋嫨Link鏍囩銆?/font>

錛?font face="Times New Roman">7錛?font face="Times New Roman">       鍦?font face="Times New Roman">Category涓嬫媺鍒楄〃妗嗕腑閫夋嫨General銆?/font>

錛?font face="Times New Roman">8錛?font face="Times New Roman">       鍦?font face="Times New Roman">Object/Library Modules妗嗕腑錛屽湪褰撳墠鏂囨湰鐨勫悗闈紝杈撳叆yld.lib ylmtd.lib ylmtdlld.lib銆?/font>

錛?font face="Times New Roman">9錛?font face="Times New Roman">       鍦?font face="Times New Roman">Settings for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Win32 Release銆?/font>

錛?font face="Times New Roman">10錛?font face="Times New Roman">   閲嶅絎?font face="Times New Roman">8姝ョ殑宸ヤ綔銆?/font>

錛?font face="Times New Roman">11錛?font face="Times New Roman">   鐐瑰嚮OK鎸夐挳錛?font face="Times New Roman">Project Settings瀵硅瘽妗嗗皢鎺ュ彈璁劇疆騫跺叧闂?/font>

VC++鐜板湪鍙互浠庣壒瀹氱殑搴撲腑鎺ュ彈YACC鍜?font face="Times New Roman">Lex鎵闇鐨勫嚱鏁板拰鍙橀噺銆?/font>

3錛庡簲鐢?/font>

錛?font face="Times New Roman">1錛夊湪Parser Generator涓嬬殑緙栬緫紿楀彛杈撳叆YACC婧愮▼搴忥紙鎵╁睍鍚嶅繀欏諱負(fù).y錛夈?/font>

錛?font face="Times New Roman">2錛夌敤Parser Generator涓嬬殑Project鑿滃崟鐨?font face="Times New Roman">Compile file鍛戒護(hù)緙栬瘧婧愮▼搴忥紝鐢熸垚鐩稿簲鐨?font face="Times New Roman">C璇█婧愮▼搴忥紙.cpp錛夈?/font>

錛?font face="Times New Roman">3錛夌敤VC++緙栬瘧錛岃繛鎺?font face="Times New Roman">C璇█婧愮▼搴忥紝鐢熸垚鍙墽琛岀▼搴忥紙.exe錛夊悗鍗沖彲鎵ц銆?/font>

鍙傝冩枃鐚細(xì)

[1] 鍚曟槧鑺?寮犵礌鐞?钂嬬淮鏉?緙栬瘧鍘熺悊.鍖椾含: 娓呭崕澶у鍑虹増紺? 1998.1


鑲ヤ粩 2008-09-20 00:10 鍙戣〃璇勮
]]>
IBM----Yacc 涓?Lex 蹇熷叆闂?/title><link>http://m.shnenglu.com/woaidongmao/archive/2008/09/19/62295.html</link><dc:creator>鑲ヤ粩</dc:creator><author>鑲ヤ粩</author><pubDate>Fri, 19 Sep 2008 10:14:00 GMT</pubDate><guid>http://m.shnenglu.com/woaidongmao/archive/2008/09/19/62295.html</guid><wfw:comment>http://m.shnenglu.com/woaidongmao/comments/62295.html</wfw:comment><comments>http://m.shnenglu.com/woaidongmao/archive/2008/09/19/62295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/woaidongmao/comments/commentRss/62295.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/woaidongmao/services/trackbacks/62295.html</trackback:ping><description><![CDATA[     鎽樿: Lex 鍜?Yacc 鏄?UNIX 涓や釜闈炲父閲嶈鐨勩佸姛鑳藉己澶х殑宸ュ叿銆備簨瀹炰笂錛屽鏋滀綘鐔熺粌鎺屾彙 Lex 鍜?Yacc 鐨勮瘽錛屽畠浠殑寮哄ぇ鍔熻兘浣垮垱寤?FORTRAN 鍜?C 鐨勭紪璇戝櫒濡傚悓鍎挎垙銆侫shish Bansal 涓烘?zhèn)ㄨ缁嗙殑璁ㄨZ簡緙栧啓鑷繁鐨勮璦鍜岀紪璇戝櫒鎵鐢ㄥ埌鐨勮繖涓ょ宸ュ叿錛屽寘鎷父瑙勮〃杈懼紡銆佸0鏄庛佸尮閰嶆ā寮忋佸彉閲忋乊acc 璇硶鍜岃В鏋愬櫒浠g爜銆傛渶鍚庯紝浠栬В閲婁簡鎬庢牱鎶?Lex 鍜?Yacc 緇撳悎璧鋒潵銆?Lex ...  <a href='http://m.shnenglu.com/woaidongmao/archive/2008/09/19/62295.html'>闃呰鍏ㄦ枃</a><img src ="http://m.shnenglu.com/woaidongmao/aggbug/62295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/woaidongmao/" target="_blank">鑲ヤ粩</a> 2008-09-19 18:14 <a href="http://m.shnenglu.com/woaidongmao/archive/2008/09/19/62295.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Yacc 涓?Lex 蹇熷叆闂?Lex 涓?Yacc 浠嬬粛http://m.shnenglu.com/woaidongmao/archive/2008/09/19/62294.html鑲ヤ粩鑲ヤ粩Fri, 19 Sep 2008 10:06:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/09/19/62294.htmlhttp://m.shnenglu.com/woaidongmao/comments/62294.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/09/19/62294.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/62294.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/62294.html闃呰鍏ㄦ枃

鑲ヤ粩 2008-09-19 18:06 鍙戣〃璇勮
]]>
yacc / lex 鍦╨inux 涓?浣跨敤鎸囧崡http://m.shnenglu.com/woaidongmao/archive/2008/09/19/62293.html鑲ヤ粩鑲ヤ粩Fri, 19 Sep 2008 10:01:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/09/19/62293.htmlhttp://m.shnenglu.com/woaidongmao/comments/62293.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/09/19/62293.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/62293.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/62293.html

    Lex 鍜?Yacc 鏄?Unix 鍜孡inux 涓嬭瘝娉曞拰璇硶鐨勫垎鏋愶紝瑙f瀽宸ュ叿錛屾湁浜嗚繖涓や釜宸ュ叿錛屼綘鍙互鑷繁鍒朵綔鎯寵鐨勭紪璇戝櫒錛屼篃鍙互閲嶆柊鍒朵綔宸叉湁紼嬪簭璇█鐨勮В鏋愬櫒銆傞渶瑕佹敞鎰忕殑鏄痩inux涓嬬殑榪欎袱涓伐鍏風(fēng)敓鎴愮殑紼嬪簭婧愮爜鍙兘鏄疌鍜孋++璇█錛屽綋鐒剁幇鍦ㄦ棭宸叉湁綾諱技鍙互鐢熸垚Java婧愮爜鐨勮娉曞垎鏋愬櫒錛屽杈冨父鐢ㄧ殑JavaCC(Java Compiler Compiler)錛岀浉鍏沖唴瀹瑰彲浠ュ幓緗戜笂鎼滅儲(chǔ)銆侺ex鍜孻acc宸茶縐繪鍒皐indows涓嬶紝鐜板湪甯哥敤鐨勫伐鍏鋒湁Parser Generator銆傛湰鏂囧彧浠嬬粛Linux 涓婰ex鍜孻acc鐨勪嬌鐢ㄦ柟娉曘?br>

Lex浠嬬粛

Lex 閫氳繃瀵?lex鎴?l鏂囦歡瀹氫箟鐨勬牸寮忕敓鎴愪竴涓狢璇█婧愮爜鏂囦歡錛岄氳繃緙栬瘧榪欎釜婧愮爜錛屽氨鐢熸垚浜?lex鏂囦歡鎴?l鏂囦歡瀹氫箟鐨勭紪璇戝櫒銆?lex鎴?l鏂囦歡鐨勬牸寮忓垎涓夋:

1.鍏ㄥ眬鍙橀噺澹版槑閮ㄥ垎
2.璇嶆硶瑙勫垯閮ㄥ垎
3.鍑芥暟瀹氫箟閮ㄥ垎

浠ヤ笅鏄竴涓畝鍗曠殑渚嬪瓙錛歭ex_example.l鏂囦歡

%{            //鍏ㄥ眬澹版槑閮ㄥ垎
/*鏋楁湪100 linux
www.linmu100.com
*/
#include <stdio.h>  

extern char *yytext;
extern FILE *yyin;
int sem_count = 0;

%}

//瑙勫垯瀹氫箟閮ㄥ垎錛?br>%%
[a-zA-Z][a-zA-Z0-9]*    {printf("WORD[%s] ", yytext);}
[a-zA-Z0-9\/.-]+        printf("FILENAME ");
\"                      printf("QUOTE ");
\{                      printf("OBRACE ");
\}                      printf("EBRACE ");
;                       {sem_count++; printf("SEMICOLON ");}
\n                      printf("\n");
[ \t]+                  /* ignore whitespace */;
%%

//浠ヤ笅涓哄嚱鏁板畾涔夐儴鍒?br>int main(int avgs, char *avgr[]) 
{
    yyin = fopen(avgr[1], "r");
    if (!yyin)
    {
        return 0;
    }
    yylex();
    printf("sem_count : %d\n", sem_count);
    fclose(yyin);

    return 1;
}

Lex 甯哥敤鏍煎紡濡備笅琛紝甯歌琛ㄨ揪寮忥細(xì)

瀛楃

鍚箟

A-Z, 0-9, a-z

鏋勬垚浜嗛儴鍒嗘ā寮忕殑瀛楃鍜屾暟瀛椼?o:p>

.

鍖歸厤浠繪剰瀛楃錛岄櫎浜?\n銆?o:p>

-

鐢ㄦ潵鎸囧畾鑼冨洿銆備緥濡傦細(xì)A-Z 鎸囦粠 A 鍒?Z 涔嬮棿鐨勬墍鏈夊瓧絎︺?o:p>

[ ]

涓涓瓧絎﹂泦鍚堛傚尮閰嶆嫭鍙峰唴鐨勪換鎰?nbsp;瀛楃銆傚鏋滅涓涓瓧絎︽槸 ^ 閭d箞瀹冭〃紺哄惁瀹氭ā寮忋備緥濡? [abC] 鍖歸厤 a, b, 鍜?C涓殑浠諱綍涓涓?o:p>

*

鍖歸厤0涓垨鑰呭涓笂榪扮殑妯″紡銆?o:p>

+

鍖歸厤1涓垨鑰呭涓笂榪版ā寮忋?o:p>

?

鍖歸厤0涓垨1涓笂榪版ā寮忋?o:p>

$

浣滀負(fù)妯″紡鐨勬渶鍚庝竴涓瓧絎﹀尮閰嶄竴琛岀殑緇撳熬銆?o:p>

{ }

鎸囧嚭涓涓ā寮忓彲鑳藉嚭鐜扮殑嬈℃暟銆?渚嬪: A{1,3} 琛ㄧず A 鍙兘鍑虹幇1嬈℃垨3嬈°?o:p>

\

鐢ㄦ潵杞箟鍏冨瓧絎︺傚悓鏍風(fēng)敤鏉ヨ鐩栧瓧絎﹀湪姝よ〃涓畾涔夌殑鐗規(guī)畩鎰忎箟錛屽彧鍙栧瓧絎︾殑鏈剰銆?o:p>

^

鍚﹀畾銆?o:p>

|

琛ㄨ揪寮忛棿鐨勯昏緫鎴栥?o:p>

"<涓浜涚鍙?gt;"

瀛楃鐨勫瓧闈㈠惈涔夈傚厓瀛楃鍏鋒湁銆?o:p>

/

鍚戝墠鍖歸厤銆傚鏋滃湪鍖歸厤鐨勬ā鐗堜腑鐨?#8220;/”鍚庤窡鏈夊悗緇〃杈懼紡錛屽彧鍖歸厤妯$増涓?#8220;/”鍓嶉潰鐨勯儴鍒嗐傚錛氬鏋滆緭鍏?A01錛岄偅涔堝湪妯$増 A0/1 涓殑 A0 鏄尮閰嶇殑銆?o:p>

( )

灝嗕竴緋誨垪甯歌琛ㄨ揪寮忓垎緇勩?o:p>


甯歌琛ㄨ揪寮忎婦渚?o:p>

甯歌琛ㄨ揪寮?o:p>

鍚箟

joke[rs]

鍖歸厤 jokes 鎴?joker銆?o:p>

A{1,2}shis+

鍖歸厤 AAshis, Ashis, AAshi, Ashi銆?o:p>

(A[b-e])+

鍖歸厤鍦?A 鍑虹幇浣嶇疆鍚庤窡闅忕殑浠?b 鍒?e 鐨勬墍鏈夊瓧絎︿腑鐨?0 涓垨 1涓?o:p>



浣跨敤lex鎵弿涓婅堪涓句緥鏂囦歡 lex_example.l錛?br>lex lex_example.l
緙虹渷浼?xì)鐢熸垚lex.yy.c鏂囦歡錛岀劧鍚庣敤gcc緙栬瘧榪欎釜鏂囦歡錛屾敞鎰忚鏈?ll閫夐」:
gcc lex.yy.c -o analyse -ll
榪欐牱灝辯敓鎴愪簡涓涓畝鍗曠殑璇嶆硶鍒嗘瀽鍣╝nalyse錛屽亣璁炬湁鏂囦歡demo錛屽叾鍐呭濡備笅鎵紺?
firstword;
secondword;
thirdword

fourthword{
fifthword
}
杈撳叆鍛戒護(hù):
./analyse demo
浼?xì)鏈夊涓嬫槃·哄Q?br>WORD[firstword] SEMICOLON 
WORD[secondword] SEMICOLON 
WORD[thirdword] 

WORD[fourthword] OBRACE 
WORD[fifthword] 
EBRACE 
sem_count : 2

瀹為檯涓婏紝瀵逛簬涓婅堪l(fā)ex_example.l鏂囦歡錛屽嚱鏁板畾涔夐儴鍒嗗彲浠ュ畬鍏ㄧ渷鐣ワ紝鍥犱負(fù)lex浼?xì)鑷姩湄?fù)浣犵敓鎴恗ain鍑芥暟銆傝繖鏃朵粛鐒舵寜涓婅堪鏂規(guī)硶鐢熸垚analyse錛岃緭鍏ュ懡浠?
./analse < demo
緇撴灉濡備笅錛?br>WORD[firstword] SEMICOLON 
WORD[secondword] SEMICOLON 
WORD[thirdword] 

WORD[fourthword] OBRACE 
WORD[fifthword] 
EBRACE 


鍦ㄤ笂榪發(fā)ex_example.l鏂囦歡涓垜浠繕浣跨敤浜嗕袱涓彉閲忥細(xì)
extern char *yytext;
extern FILE *yyin;
榪欎袱涓彉閲忔槸lex鎻愪緵鐨勫閮ㄥ熷彛錛岀敤鎴峰彲浠ユ牴鎹嚜宸遍渶瑕佽嚜宸辨洿鏀癸紝lex鎻愪緵浜嗕互涓嬫帴鍙o細(xì)

Lex 鍙橀噺

yyin

FILE* 綾誨瀷銆?瀹冩寚鍚?lexer 姝e湪瑙f瀽鐨勫綋鍓嶆枃浠躲?o:p>

yyout

FILE* 綾誨瀷銆?瀹冩寚鍚戣褰?lexer 杈撳嚭鐨勪綅緗?緙虹渷鎯呭喌涓嬶紝yyin 鍜?yyout 閮芥寚鍚戞爣鍑嗚緭鍏ュ拰杈撳嚭銆?o:p>

yytext

鍖歸厤妯″紡鐨勬枃鏈瓨鍌ㄥ湪榪欎竴鍙橀噺涓紙char*錛夈?o:p>

yyleng

緇欏嚭鍖歸厤妯″紡鐨勯暱搴︺?o:p>

yylineno

鎻愪緵褰撳墠鐨勮鏁頒俊鎭傦紙lexer涓嶄竴瀹氭敮鎸併傦級(jí)

Lex 鍑芥暟

yylex()

榪欎竴鍑芥暟寮濮嬪垎鏋愩?瀹冪敱 Lex 鑷姩鐢熸垚銆?o:p>

yywrap()

榪?涓鍑芥暟鍦ㄦ枃浠訛紙鎴栬緭鍏ワ級(jí)鐨勬湯灝捐皟鐢ㄣ傚鏋滃嚱鏁扮殑榪斿洖鍊兼槸1錛屽氨鍋滄瑙f瀽銆?鍥犳瀹冨彲浠ョ敤鏉ヨВ鏋愬涓枃浠躲備唬鐮佸彲浠ュ啓鍦ㄧ涓夋錛岃繖灝辮兘澶熻В鏋愬涓枃浠躲?鏂規(guī)硶鏄嬌鐢?yyin 鏂囦歡鎸囬拡錛堣涓婅〃錛夋寚鍚戜笉鍚岀殑鏂囦歡錛岀洿鍒版墍鏈夌殑鏂囦歡閮借瑙f瀽銆傛渶鍚庯紝yywrap() 鍙互榪斿洖 1 鏉ヨ〃紺鴻В鏋愮殑緇撴潫銆?o:p>

yyless(int n)

榪欎竴鍑芥暟鍙互鐢ㄦ潵閫佸洖闄や簡鍓嶆唫? 涓瓧絎﹀鐨勬墍鏈夎鍑烘爣璁般?o:p>

yymore()

榪欎竴鍑芥暟鍛婅瘔 Lexer 灝嗕笅涓涓爣璁伴檮鍔犲埌褰撳墠鏍囪鍚庛?o:p>

浠ヤ笅鏄竴涓綆楀瓧絎︿釜鏁扮殑.l鏂囦歡鍐呭錛屾湁鍏磋叮鐨勬湅鍙嬪彲浠ョ紪璇戣瘯璇?br>%{ 
/*
鏋楁湪100 linux
www.linmu100.com
*/
int wc = 0;        /* word count */ 
%} 
 
%% 
[a-zA-Z]+    { wc++; } 
\n|.        { /* gobble up */ } 
%% 
int main(void) 

    int n = yylex(); 
    return n; 

 
int yywrap(void) 

    printf("word count: %d\n", wc); 
    return 1; 
}

yacc浠嬬粛

Yacc 鏄?Yet Another Compiler Compiler鐨勭緝鍐欍?Yacc 鐨?GNU 鐗堝彨鍋?Bison銆傚畠鏄竴縐嶈娉曡В鏋愬伐鍏楓傚畠鐢ㄥ反縐戞柉鑼冨紡(BNF, Backus Naur Form)鏉ヤ功鍐欍傛寜鐓ф儻渚嬶紝Yacc 鏂囦歡鏈?.y 鍚庣紑銆?br>瀹為檯涓婏紝yacc鎵嶆槸鐪熸鍒嗘瀽璇硶鐨勬牳蹇冿紝.y鏂囦歡鏍煎紡鍜?l鏂囦歡涓鏍峰垎涓夋錛屼絾姣忎竴孌電殑鎰忎箟鏈夋墍涓嶅悓錛?br>1.鍏ㄥ眬鍙橀噺澹版槑錛岀粓緇撶鍙?緇堢絎﹀彿)澹版槑
2.璇硶瀹氫箟
3.鍑芥暟瀹氫箟

浠ヤ笅鏄竴涓畝鍗曠殑yacc_example.y鏂囦歡錛屽畾涔変簡涓涓畝鍗曠殑璁$畻鍣細(xì)
%{ 
//鍏ㄥ眬鍙橀噺澹版槑 
#include <ctype.h> 
#include <stdio.h> 
#define YYSTYPE double /*double type for YACC stack; for yylval*/ 
 
/*鏋楁湪100 www.linmu100.com */ 
 
void yyerror(const char *str) 

    fprintf(stderr, "error:%s\n", str ); 

%} 
//緇堢粨絎﹀0鏄?nbsp;
%token NUMBER 
 
%% 
lines    : lines expr '\n'            { printf("%g\n", $2); } 
        | lines '\n' 
        | /* e */ 
        | error '\n'                { yyerror("reenter last line:"); /*yyerrok(); */} 
        ; 
 
expr    : expr '+' term                { $$ = $1 + $3; } 
        | expr '-' term                { $$ = $1 - $3; } 
        | term 
        ; 
 
term    : term '*' factor            { $$ = $1 * $3; } 
        | term '/' factor            { $$ = $1 / $3; } 
        | factor 
        ; 
 
factor    : '(' expr ')'                { $$ = $2; } 
        | '(' expr error            { $$ = $2; yyerror("missing ')'"); /*yyerrok(); */} 
        | '-' factor                { $$ = -$2; } 
        | NUMBER 
        ; 
 
%% 
//浠ヤ笂閮ㄥ垎涓鴻娉曞畾涔夛紝浠ヤ笅閮ㄥ垎涓哄嚱鏁板畾涔?nbsp;
int main(void) 

    return yyparse(); 

 
int yylex(void) 

    int c; 
    while ((c = getchar()) == ' '); 
    if (c == '.' || isdigit(c)) { 
        ungetc(c, stdin); 
        scanf("%lf", &yylval); 
        return NUMBER; 
    } 
    return c; 


浣跨敤yacc鎵弿榪欎釜鏂囦歡錛?br>yacc yacc_example.y
緙虹渷浼?xì)鐢熸垚涓涓獃.tab.c鏂囦歡錛岀劧鍚庣敤gcc緙栬瘧榪欎釜鏂囦歡錛屾敞鎰忚鏈夐夐」 -ll 鎴?nbsp;-ly錛?br>gcc y.tab.c -o analyse -ll
榪愯./analyse錛氱粨鏋滃涓嬪浘鎵紺?
clip_image001

鐜板湪瀵圭収yacc_example.y鏂囦歡璁茶В涓涓?y鏂囦歡鐨勮鍒欙細(xì)
1.鍦ㄥ叏灞鍙橀噺澹版槑閮ㄥ垎錛屽0鏄庝簡涓涓帴鍙e嚱鏁皔yerror錛岃繖涓嚱鏁版槸鐢ㄦ潵鍦ㄥ嚭閿欐椂璋冪敤鐨勩傝繖涓孌典富瑕佹槸澹版槑涓浜涘彉閲忥紝鏁版嵁緇撴瀯錛屽嚱鏁扮敤銆?br>2.%token NUMBER鍒欏0鏄庝簡涓涓粓绔(緇堢粨絎?錛岃繖涓鍙鋒槸鐢盠ex榪斿洖鐨勶紝浼?xì)鍦▂acc璇硶瑙勫垯涓敤鍒般?br>3.璇硶瑙勫垯閮ㄥ垎鍒欏0鏄庝簡璇硶錛?br>    3.1璇硶瑙勫垯瀵瑰鍙湁涓涓帴鍙o紝榪欎竴鐐硅娉ㄦ剰錛屽垵瀛﹁呭父甯鎬細(xì)鐘娉曞澶栨湁澶氫釜鎺ュ彛鐨勯敊璇?br>    3.2鏃犺鏄痩ex鏂囦歡榪樻槸yacc鏂囦歡閮借娉ㄦ剰鏈澶у彲鑳芥х殑璇嶆硶鍜岃娉曡鍒欒鏀懼湪鍐茬獊瑙勫垯鐨勫墠闈紝榪欐牱淇濊瘉浜嗘渶澶у彲鑳借鍒欎細(xì)琚渶鍏堝尮閰嶏紝姣斿lex鏂囦歡涓細(xì)
       temperator      return T1;
       temp             return T2;
        鍦▂acc鏂囦歡涓紝渚嬪瓙濡備笅
            command:
                NUMBER CHAR
                |   NUMBER
               ;

瀵逛簬.y鏂囦歡榪樿娉ㄦ剰鍏ㄥ眬璇硶錛屼互鍙?qiáng)閫掑綊鐨勮皟鐢ㄣ?br>
鍒濆鑰呭浜巠acc鏂囦歡瑙勫垯鍙兘浼?xì)杈冧负鐢熺枏锛屽叧閿畼q樿澶氬仛涓浜涚粌涔?fàn)銆?br>

Lex 鍜?Yacc 鐨勭粨鍚?br>
lex鍜寉acc緇撳悎鏃墮渶瑕佹敞鎰忕殑鏄?br>lex鏂囦歡澶磋寮曠敤yacc鐢熸垚鐨勫ご鏂囦歡:"y.tab.h"

浠ヤ笅鏄竴涓猯ex鍜寉acc緇撳悎鐨勫疄渚嬶細(xì)
lex_yacc_exp.l鏂囦歡錛?br>%{
/*鏋楁湪100
www.linmu100.com
*/
#include <stdio.h>
#include <string.h>
#include "y.tab.h"
extern char *yytext;
%}
%%
[0-9]+                  yylval.number=atoi(yytext); return NUMBER;
heater            return TOKHEATER;
heat                    return TOKHEAT;
on|off                  yylval.number=!strcmp(yytext,"on"); return STATE;
target                  return TOKTARGET;
temperature             return TOKTEMPERATURE;
[a-z0-9]+        yylval.string=strdup(yytext);return WORD;
\n                      /* ignore end of line */;
[ \t]+                  /* ignore whitespace */;
%%

lex_yacc_exp.y鏂囦歡:
%{
/*鏋楁湪100
www.linmu100.com
*/
#include <stdio.h>
#include <string.h>

void yyerror(const char *str)
{
    fprintf(stderr,"error: %s\n",str);
}

int yywrap()
{
    return 1;
}

main()
{
    yyparse();
}

char *heater="xl's test";

%}

%token TOKHEATER TOKHEAT TOKTARGET TOKTEMPERATURE

%union 
{
    int number;
    char *string;
}

%token <number> STATE
%token <number> NUMBER
%token <string> WORD

%%

commands:
    | commands command
    ;


command:
    heat_switch | target_set | heater_select

heat_switch:
    TOKHEAT STATE 
    {
        if($2)
            printf("\tHeater '%s' turned on\n", heater);
        else
            printf("\tHeat '%s' turned off\n", heater);
    }
    ;

target_set:
    TOKTARGET TOKTEMPERATURE NUMBER
    {
        printf("\tHeater '%s' temperature set to %d\n",heater, $3);
    }
    ;

heater_select:
    TOKHEATER WORD
    {
        printf("\tSelected heater '%s'\n",$2);
        heater=$2;
    }
    ;

杈撳叆浠ヤ笅鍛戒護(hù)錛屽垎鍒敓鎴恖ex.yy.c錛寉.tab.c錛寉.tab.h涓変釜鏂囦歡錛?br>lex lex_yacc_exp.l
yacc -d lex_yacc_exp.y
gcc lex.yy.c y.tab.c -o analyse -ll

鍒涘緩涓涓娉曠敤渚媎emo錛屽唴瀹瑰涓?
heat on
target temperature 99
heater asdfsieiwef99adsf

杈撳叆./analyse <demo鍒嗘瀽demo鏂囦歡錛屼細(xì)寰楀埌浠ヤ笅緇撴灉:
clip_image002 


緇撹錛?br>Lex 鍜?Yacc 鏄緢寮哄ぇ鐨勫伐鍏鳳紝榪欓噷鍙畝鍗曚粙緇嶄簡涓浜涘叆闂ㄧ煡璇嗐?br>The Lex & Yacc Page 涓湁寰堝鏈夎叮鐨勫巻鍙插弬鑰冿紝浠ュ強(qiáng) 闈炲父濂界殑 lex 鍜?yacc 鏂囨。銆?nbsp;

鍙傝冩枃妗o細(xì)
http://www.ibm.com/developerworks/cn/linux/l-lexyac.html
http://blog.csdn.net/ThinkinginLinux/archive/2005/03/19/323379.aspx

/
/*-----Lex & Yacc ----www.linmu100.com ----*/
/
/*-----linux宸ュ叿,Lex & Yacc,鍩烘湰鎿嶄綔----*/
/
/*-----linux閰嶇疆,UNIX,寮婧愯蔣浠?linux鎶鏈?makefile----*/
/
/*----------------------@xiaolin--------------------*/
/

 



鑲ヤ粩 2008-09-19 18:01 鍙戣〃璇勮
]]>
yacc/lex windows 涓?Parser Generator 浣跨敤鎸囧崡http://m.shnenglu.com/woaidongmao/archive/2008/09/19/62292.html鑲ヤ粩鑲ヤ粩Fri, 19 Sep 2008 09:54:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/09/19/62292.htmlhttp://m.shnenglu.com/woaidongmao/comments/62292.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/09/19/62292.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/62292.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/62292.html 

clip_image001[7]


鍏充簬yacc 鍜?lex 鍜屽湪涓嬮潰閾炬帴鐨勬枃绔犻噷宸茬粡鏈夋墍浠嬬粛浜?br>/html/linuxshijie/20070909/80.html
閾炬帴涓殑鏂囩珷榪樹粙緇嶄簡鍦╨inux涓嬪浣曚嬌鐢▂acc鍜宭ex宸ュ叿錛屼笅闈富瑕佹槸浠嬬粛yacc鍜宭ex鍦╳indows涓嬬殑鐢ㄦ硶銆?/p>


       yacc鍜宭ex鍦╳indows宸茬粡縐繪鎴愬姛錛屽叾涓父鐢ㄧ殑涓涓伐鍏峰氨鏄疨arser Generator銆傝繖涓伐鍏蜂嬌鐢▂acc鍜宭ex鑳藉鐢熸垚Visual C++錛孊orland C++錛孫ther C/C++浠ュ強(qiáng)鐩稿叧Java浠g爜銆備笅闈粙緇嶄竴涓嬭繖涓伐鍏鋒槸濡備綍鐢熸垚浠g爜騫朵嬌鐢╒isual C++緙栬瘧鐨勩?br>娉細(xì)鍏充簬Parser Generator鐨勪嬌鐢ㄥ拰閰嶇疆錛屽叾瀹炲湪Parser Generator Help涓凡緇忔湁寰堣緇嗙殑浠嬬粛錛屾劅鍏磋叮鐨勬湅鍙嬪彲浠ュ幓閭i噷鏌ュ埌鏇村鏈夌敤鐨勪俊鎭?br>棣栧厛瑕佸幓http://www.bumblebeesoftware.com/downloads.htm涓嬭澆Parser Generator銆?br>瀹夎瀹屾瘯鍚庯紝鎴戜滑鍙互鍦ㄥ畠鐨勫畨瑁呯洰褰曚笅鎵懼埌涓浜涗緥瀛愪互鍙?qiáng)缂栬瘧绋嬪簭鎵闇鐨勫簱鏂囦歡鍜屾簮鏂囦歡錛岃繖浜涙枃浠跺湪緙栬瘧鏄緢閲嶈銆?br>鍗曠嫭yacc鏂囦歡鐨勭紪璇戙?br>


浠ヤ笅鏄竴涓崟鐙殑yacc鏂囦歡錛屽疄鐜頒竴涓畝鍗曠殑璁$畻鍣ㄥ姛鑳姐?/strong>
%{
/************************************************************
www.linmu100.com
************************************************************/
#include <ctype.h>
#include <stdio.h>
#define YYSTYPE double /* double type for YACC stack */
%}
%token NUMBER
%%
lines    : lines expr '\n'            { printf("%g\n", $2); }
        | lines '\n'
        | /* e */
        | error '\n'                { yyerror("reenter last line:"); yyerrok(); }
        ;
expr    : expr '+' term                { $$ = $1 + $3; }
        | expr '-' term                { $$ = $1 - $3; }
        | term
        ;
term    : term '*' factor            { $$ = $1 * $3; }
        | term '/' factor            { $$ = $1 / $3; }
        | factor
        ;
factor    : '(' expr ')'                { $$ = $2; }
        | '(' expr error            { $$ = $2; yyerror("missing ')'"); yyerrok(); }
        | '-' factor                { $$ = -$2; }
        | NUMBER
        ;
%%
int main(void)
{
    return yyparse();
}
int yylex(void)
{
    int c;
    while ((c = getchar()) == ' ');
    if (c == '.' || isdigit(c)) {
        ungetc(c, stdin);
        scanf("%lf", &yylval);
        return NUMBER;
    }
    return c;
}


鎴戜滑鐢≒arser Generator鐨凱roject --> Parser Wizard鍒涘緩涓涓伐紼嬶紝濡備笅鍥炬墍紺猴紝娉ㄦ剰綰㈠湀閮ㄥ垎鐨勮緗細(xì)
clip_image002[7]


鐒跺悗璁劇疆鏂囦歡錛屾ā鏉匡細(xì)
clip_image003[7]


鍏朵綑鎸夐粯璁ゅ畬鎴愬嵆鍙細(xì)
clip_image004[7]


榪欐椂錛屾垜浠彲浠ョ湅鍒癙arser Generator甯垜浠嚜鍔ㄧ敓鎴愪簡涓涓猰yparser.y鏂囦歡錛岃娉曡鍒欏氨鍙互鍦ㄨ繖閲屽姞浜嗐?br>clip_image005[7]


鐜板湪鎴戜滑鎶婂紑澶村睍紺虹殑yacc婧愮爜瀹屽叏瑕嗙洊myparser.y鏂囦歡錛岀劧鍚庣紪璇戯紝鎴愬姛鍚庝細(xì)鐢熸垚涓変釜鏂囦歡錛歮yparser.c錛宮yparser.h錛宮yparser.v
濂斤紝鐜板湪鎴戜滑瑕佸仛鐨勫氨鏄敤vc鏉ョ紪璇憁yparser.c錛宮yparser.h榪欎袱涓枃浠朵簡銆?/p>


鎵撳紑Microsoft Visual C++ 6.0錛屾柊寤轟竴涓伐紼嬨?br>clip_image006[7]


鐒跺悗灝哖arser Generator鐢熸垚鐨勪袱涓枃浠秏yparser.c錛宮yparser.h瀵煎叆宸ョ▼銆傦紙榪欓噷灝變笉澶氳浜哵-^錛?br>鐜板湪瑕佽緗幆澧冨彉閲忎簡錛岄鍏堣瀵煎叆Parser Generator鐨勫簱鏂囦歡鍜屾簮鏂囦歡銆傚湪宸ュ叿->閫夐」閲岃璁劇疆榪欎簺鐜鍙橀噺銆?br>clip_image007[7]


clip_image008[7]


clip_image009[7]


璁劇疆瀹岃繖浜涙枃浠跺悗錛岃繕瑕佸湪宸ョ▼->璁劇疆閲屾坊鍔爕l.lib搴擄細(xì)
clip_image010[7]


濂斤紝涓鍒囪緗畬姣曪紝寮濮嬬紪璇戯紝緙栬瘧閫氳繃鍚庯紝灝變細(xì)鐢熸垚yacc_vc.exe鏂囦歡銆?br>鍋囪鏈夋枃浠禿emo.txt錛屾鏂囦歡鍜寉acc_vc.exe鍦ㄥ悓涓涓洰褰曪紝鍏跺唴瀹瑰涓嬶細(xì)
1+3*5
3*4-23
7- 9 *30 - 999


鍦ㄦ鐩綍鐨勫懡浠よ涓嬭繍琛屽涓嬪懡浠わ細(xì)yacc_vc.exe <demo.txt錛屽嵆鍙緱鍒拌綆楃粨鏋滐細(xì)
clip_image011[7]




鍗曠嫭lex鏂囦歡鐨勭紪璇戙?/strong>
浠ヤ笅鏄竴涓崟鐙殑lex鏂囦歡錛屽疄鐜頒竴涓畝鍗曠殑璁$畻鍗曡瘝涓暟鍔熻兘銆?br>%{
/************************************************************
www.linmu100.com
************************************************************/
int wc = 0;        /* word count */
%}
%%
[a-zA-Z]+    { wc++; }
\n|.        { /* gobble up */ }
%%
int main(void)
{
    int n = yylex();
    return n;
}
int yywrap(void)
{
    printf("word count: %d\n", wc);
    return 1;
}


鎴戜滑鐢≒arser Generator鏂板緩涓涓伐紼嬶細(xì)
clip_image012[7]


clip_image013[7]


涓嬩竴姝ラ粯璁ゅ畬鎴愬嵆鍙傝繖鏃訛紝Parser Generator甯垜浠嚜鍔ㄧ敓鎴愪簡涓涓猰ylexer.l鏂囦歡錛岃瘝娉曡鍒欏彲浠ュ湪榪欓噷鍔犮?br>鍚屾牱鐨勶紝鎴戜滑鐢ㄤ笂闈㈠睍紺虹殑lex鏂囦歡鍐呭瀹屽叏瑕嗙洊mylexer.l鏂囦歡錛岀紪璇戝悗鍚屾牱鐢熸垚涓変釜鏂囦歡錛岀劧鍚庣敤VC緙栬瘧鍏朵腑鐨刴yparser.c錛宮yparser.h榪欎袱涓枃浠躲?br>VC鐨勮緗柟娉曞拰涓婇潰緙栬瘧鍗曠嫭yacc鏂囦歡鏃剁殑姝ラ瀹屽叏涓鏍鳳紝鏈緇堜細(xì)鐢熸垚涓涓彲浠ヨ綆楁枃浠跺崟璇嶆暟鐩殑.exe鏂囦歡銆?br>


yacc 鍜?lex鏁村悎鏂囦歡鐨勭紪璇戙?/strong>
浠ヤ笅鍒嗗埆鏄痽acc鏂囦歡鍜宭ex鏂囦歡鐨勫唴瀹癸紝榪欎袱涓枃浠跺叡鍚屽疄鐜頒簡鑷畾涔夌殑涓涓畝鍗曡娉曡鍒欍?br>yacc鏂囦歡鍐呭錛?br>%{
/*
www.linmu100.com
*/
#include <stdio.h>
#include <string.h>
void yyerror(const char *str)
{
    fprintf(stderr,"error: %s\n",str);
}
int yywrap()
{
    return 1;
}
main()
{
    yyparse();
}
char *heater="xl's test";
%}
%token TOKHEATER TOKHEAT TOKTARGET TOKTEMPERATURE
%union
{
    int number;
    char *string;
}
%token <number> STATE
%token <number> NUMBER
%token <string> WORD
%%
commands:
    | commands command
    ;
command:
    heat_switch | target_set | heater_select
    ;
heat_switch:
    TOKHEAT STATE
    {
        if($2)
            printf("\tHeater '%s' turned on\n", heater);
        else
            printf("\tHeat '%s' turned off\n", heater);
    }
    ;
target_set:
    TOKTARGET TOKTEMPERATURE NUMBER
    {
        printf("\tHeater '%s' temperature set to %d\n",heater, $3);
    }
    ;
heater_select:
    TOKHEATER WORD
    {
        printf("\tSelected heater '%s'\n",$2);
        heater=$2;
    }
    ;
lex鏂囦歡鍐呭錛?br>%{
/*
www.linmu100.com
*/
#include <stdio.h>
#include <string.h>
#include "myparser.h"                  //娉ㄦ剰錛岃繖閲岀殑澶存枃浠惰鍜孭arser Generator鐢熸垚鐨勫ご鏂囦歡鍚嶄竴鏍楓?br>extern char *yytext;
%}
%%
[0-9]+                  {yylval.number=atoi(yytext); return NUMBER;}
heater            return TOKHEATER;
heat                    return TOKHEAT;
on|off                  {yylval.number=!strcmp(yytext,"on"); return STATE;}
target                  return TOKTARGET;
temperature             return TOKTEMPERATURE;
[a-z0-9]+        {yylval.string=strdup(yytext);return WORD;}
\n                      /* ignore end of line */;
[ \t]+                  /* ignore whitespace */;
%%
鐜板湪鐢≒arser Generator鍒涘緩鏂扮殑宸ョ▼錛?br>clip_image014[7]


clip_image015[7]


clip_image016[7]


鍏朵綑鐨勬楠ゅ拰涓婇潰緙栬瘧yacc鏃剁殑姝ラ鐩稿悓錛屾渶緇堝彲浠ョ敓鎴恇oth_y_l.exe鏂囦歡錛屾斁涓涓猟emo.txt鍜宐oth_y_l.exe鍦ㄥ悓涓涓洰褰曚笅錛宒emo.txt鍐呭濡備笅錛?br>heat on
target temperature 99
heater asdfsieiwef99adsf


鐒跺悗鍦ㄦ鐩綍鐨勫懡浠よ涓嬫墽琛宐oth_y_l.exe <demo.txt寰楀埌錛?br>clip_image017[7]


浠ヤ笂鍗充負(fù)Parser Generator鐨勪嬌鐢ㄤ互鍙?qiáng)濡備綍鐢╒C緙栬瘧銆?br>/
/*-----Lex & Yacc ----www.linmu100.com ----*/
/
/*-----linux宸ュ叿,Lex & Yacc,windows涓嬫搷浣?---*/
/
/*-----linux閰嶇疆,UNIX,寮婧愯蔣浠?linux鎶鏈?makefile----*/
/
/*----------------------@xiaolin--------------------*/



鑲ヤ粩 2008-09-19 17:54 鍙戣〃璇勮
]]>
vc++涓嶻ACC鍜孡EX闆嗘垚鐜http://m.shnenglu.com/woaidongmao/archive/2008/05/17/50118.html鑲ヤ粩鑲ヤ粩Fri, 16 May 2008 16:33:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/05/17/50118.htmlhttp://m.shnenglu.com/woaidongmao/comments/50118.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/05/17/50118.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/50118.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/50118.html鍦ㄨ繖閲岋紝灝嗕粙緇嶇敱鑻卞浗Bumble-Bee Software鍏徃鐢熶駭鐨刉indows鐜涓嬬殑YACC鍜孡EX闆嗘垚鐜Parser Generator銆侾arser Generator鏄疻indows涓媃ACC鍜孡EX鐨勫疄鐜般傚畠鍖呮嫭涓涓浘褰㈢敤鎴風(fēng)晫闈紝鍚屾椂鍖呮嫭YACC鍜孡ex涓や釜鐗堟湰錛屽垎鍒彨鍋欰YACC鍜孉lex銆侾arser Generator闈炲父閫傚悎浜庝笌VC++闆嗘垚銆?

鍦ㄥ畨瑁呬簡Parser Generator鍚庯紝鎵ц浠ヤ笅姝ラ錛屽嵆鍙嬌VC++緙栬瘧鍜岃繛鎺ョ敱Parser Generator浜х敓鐨勬枃浠躲?

1錛庣洰褰曡緗?

鍦╒C++涓墽琛屼互涓嬫楠わ紝姣忎釜姝ラ鍙墽琛屼竴嬈°?

錛?錛?閫夋嫨Tools鑿滃崟涓殑Options鍛戒護(hù)錛屽湪灞忓箷涓婂嵆浼?xì)鍑虹幇Options瀵硅瘽妗嗐?

錛?錛?閫夋嫨Directories閫夐」鍗°?

錛?錛?鍦⊿how Directories for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Include Files銆?

錛?錛?鍦―irectories妗嗕腑錛岀偣鍑?yán)L渶鍚庣殑絀虹洰褰曪紝騫跺~鍏arser Generator鐨刬nclude瀛愮洰褰曠殑璺緞銆?

錛?錛?鍦⊿how Directories for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Library Files銆?

錛?錛?鍦―irectories妗嗕腑錛岀偣鍑?yán)L渶鍚庣殑絀虹洰褰曪紝騫跺~鍏arser Generator鐨刲ib\msdev瀛愮洰褰曠殑璺緞銆?

錛?錛?鍦⊿how Directories for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Source Files銆?

錛?錛?鍦―irectories妗嗕腑錛岀偣鍑?yán)L渶鍚庣殑絀虹洰褰曪紝騫跺~鍏arser Generator鐨凷ource瀛愮洰褰曠殑璺緞銆?

錛?錛?鐐瑰嚮OK鎸夐挳,Options瀵硅瘽妗嗗皢鎺ュ彈璁劇疆騫跺叧闂?

VC++鍦ㄥ氨鍙互鎵懼埌鍖呭惈鏂囦歡yacc.h鍜宭ex.h浠ュ強(qiáng)YACC鍜孡ex鐨勫簱鏂囦歡銆?

2錛庨」鐩緗?

瀵逛簬姣忎釜VC++欏圭洰錛岄兘闇鍦╒C++涓墽琛屼互涓嬫楠わ細(xì)

錛?錛?閫夋嫨Project鑿滃崟涓殑Settings鍛戒護(hù)錛屽湪灞忓箷涓婂嵆浼?xì)鍑虹幇Project Settings瀵硅瘽妗嗐?

錛?錛?鍦⊿ettings for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Win32 Debug銆?

錛?錛?閫夋嫨C/C++鏍囩銆?

錛?錛?鍦–ategory涓嬫媺鍒楄〃妗嗕腑閫夋嫨General銆?

錛?錛?鍦≒reprocessor Definitions妗嗕腑錛屽湪褰撳墠鏂囨湰鐨勬渶鍚庯紝杈撳叆YYDEBUG銆?

錛?錛?閫夋嫨Link鏍囩銆?

錛?錛?鍦–ategory涓嬫媺鍒楄〃妗嗕腑閫夋嫨General銆?

錛?錛?鍦∣bject/Library Modules妗嗕腑錛屽湪褰撳墠鏂囨湰鐨勫悗闈紝杈撳叆yld.lib ylmtd.lib ylmtdlld.lib銆?

錛?錛?鍦⊿ettings for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Win32 Release銆?

錛?0錛?閲嶅絎?姝ョ殑宸ヤ綔銆?

錛?1錛?鐐瑰嚮OK鎸夐挳錛孭roject Settings瀵硅瘽妗嗗皢鎺ュ彈璁劇疆騫跺叧闂?

VC++鐜板湪鍙互浠庣壒瀹氱殑搴撲腑鎺ュ彈YACC鍜孡ex鎵闇鐨勫嚱鏁板拰鍙橀噺銆?

3錛庡簲鐢?

錛?錛夊湪Parser Generator涓嬬殑緙栬緫紿楀彛杈撳叆YACC婧愮▼搴忥紙鎵╁睍鍚嶅繀欏諱負(fù).y錛夈?

錛?錛夌敤Parser Generator涓嬬殑Project鑿滃崟鐨凜ompile file鍛戒護(hù)緙栬瘧婧愮▼搴忥紝鐢熸垚鐩稿簲鐨凜璇█婧愮▼搴忥紙.cpp錛夈?

錛?錛夌敤VC++緙栬瘧錛岃繛鎺璇█婧愮▼搴忥紝鐢熸垚鍙墽琛岀▼搴忥紙.exe錛夊悗鍗沖彲鎵ц銆?

鐢ㄧ殑VC 2005, 鍜屽師鏉C 6鐨勮緗」瀵瑰簲涓嶄笂, 寰堝鍗婂ぉ閮芥壘涓嶅埌.濂戒笉瀹規(guī)槗鎵懼叏浜? 鍗磋繕鏄紪璇戝嚭閿?
鏈鍚?鍙ソ閫夋嫨鍐嶈涓涓猇C6, 鍡? 涓や釜VC, 涓嶉敊.
鍏堜粙緇嶄竴涓婸arser Generator,涓婚〉涓嬭澆:http://www.bumblebeesoftware.com/downloads.htm
Parser Generator is a YACC and Lex programming tool for Windows. As well as including a Graphical User Interace, the software also includes two versions of YACC and Lex, called AYACC and ALex. Parser Generator is able to generate C, C++ and Java parsers and lexical analysers. This includes both Unicode and Multibyte Character Set (MBCS) variants. In your applications you can create multiple, thread safe, instances of these parsers and lexical analysers.

        涓嬮潰璇翠竴涓媤indows鐜涓媝arser generator鍜寁c++鐨勫悇欏歸厤緗?

錛堜竴錛塸arser generator鐨勭幆澧冭緗?

         瀹夎濂絧arser generator錛屾墦寮闆嗘垚寮鍙戠幆澧冿紝鐐歸」鐩甈roject鑿滃崟錛屽湪涓嬫媺鑿滃崟涓塋ibBuilder錛屽脊鍑篖ibBuilder瀵硅瘽妗嗛夋嫨灞炴ф寜閽紝寮瑰嚭compiler properties 瀵硅瘽妗嗭細(xì)
   Name 閫夋嫨Visual C++ (32-bit)

   Directory :msvc32
   options:

渚濇涓?vc++鐗堟湰(Versoin 6)
鏄惁鏀寔unicode鐮併?閫夋嫨榛樿)
鏄惁鎶妛_char_t浣滀負(fù)鍐呭緩綾誨瀷銆?閫夋嫨榛樿)
涓嬭竟鏄疺C鐨勫悇縐嶇洰褰曪細(xì)
渚濇涓?br>Compiler Bin Directory (C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\BIN

Compiler Bin Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\COMMON\MSDEV98\BIN

Compiler Include Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\INCLUDE

Compiler Include Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\MFC\INCLUDE

Compiler Library Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\LIB

Compiler Library Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\MFC\LIB

    娉ㄦ剰錛氱紪璇戝櫒瀹夎鐩綍鏍規(guī)嵁涓漢瀹夎鐩綍闇瑕佸仛鐩稿簲鐨勮皟鏁淬傛墍鏈夌殑榪欎簺璁劇疆瀹屾垚涔嬪悗鐐筼k銆?br>       鏈鍚庝竴姝?閰嶇疆parser generator鐨刾roperties,濡傚浘鍗沖彲:

       榪斿洖LibBuilder銆傜偣Build灝卞彲浠ョ紪璇憊c++浣跨敤鐨刲ex涓巠acc鐨刲ib搴撱?

娉?鎴戝弬鑰僔s 2003.net鐨勮緗?鍦╒C 2005涓嬭繘琛岀浉搴旇緗? 緇撴灉lex涓巠acc鐨刲ib搴撴病鑳界紪璇戦氳繃, 鍙兘鏄垜璁劇疆閿欒, 涓嶅簲璇ユ槸灝氫笉鍏煎鐨勯棶棰樺惂.
    鐢熸垚搴撴枃浠跺湪杞歡瀹夎鐩綍涓嬬殑D:\Parser Generator 2\Cpp\Lib\msvc32鐩綍涓嬨?

錛堜簩錛塿c++鐜鐨勮緗?

1.鐩綍璁劇疆

         涓轟簡鍦╒C++涓彲浠ユ壘鍒板寘鍚枃浠秠acc.h鍜宭ex.h浠ュ強(qiáng)YACC鍜孡ex鐨勫簱鏂囦歡錛岄渶瑕佸VC++榪涜鐩稿叧鐨勭洰褰曡緗?br>錛?錛?nbsp;      閫夋嫨Tools鑿滃崟涓殑Options鍛戒護(hù)錛屾墦寮Options瀵硅瘽妗嗐?br>錛?錛?nbsp;      閫夋嫨Directories閫夐」鍗°?br>錛?錛?nbsp;      鍦⊿how Directories for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Include Files銆?br>           鍦―irectories妗嗕腑錛岀偣鍑?yán)L渶鍚庣殑絀虹洰褰曪紝騫跺~鍏?F:\PARGEN\CPP\INCLUDE(鏍規(guī)嵁涓漢瀹夎鐩綍闇瑕佸仛鐩稿簲鐨勮皟鏁?
錛?錛?nbsp;      鍦⊿how Directories for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Library Files銆?br>           鍦―irectories妗嗕腑錛岀偣鍑?yán)L渶鍚庣殑絀虹洰褰曪紝騫跺~鍏:\PARGEN\CPP\LIB\MSVC32
錛?錛?nbsp;      鍦⊿how Directories for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Source Files銆?br>           鍦―irectories妗嗕腑錛岀偣鍑?yán)L渶鍚庣殑絀虹洰褰曪紝騫跺~鍏:\PARGEN\CPP\SOURCE
錛?錛?nbsp;      鐐瑰嚮OK鎸夐挳,Options瀵硅瘽妗嗗皢鎺ュ彈璁劇疆騫跺叧闂?

2錛庨」鐩緗?br>瀵逛簬姣忎釜VC++欏圭洰錛岄兘闇鍦╒C++涓繘琛屼互涓嬭緗?/strong>錛屼互浣縑C++鍙互浠庣壒瀹氱殑搴撲腑鎺ュ彈LEX鍜孻ACC鎵闇瑕佺殑鍑芥暟鍜屽彉閲?br>錛?錛?nbsp;      閫夋嫨Project鑿滃崟涓殑Settings鍛戒護(hù)錛屾墦寮Project Settings瀵硅瘽妗嗐?br>錛?錛?nbsp;      鍦⊿ettings for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Win32 Debug銆?br>錛?錛?nbsp;      閫夋嫨C/C++閫夐」鍗★紝 鍦–ategory涓嬫媺鍒楄〃妗嗕腑閫夋嫨General銆?br>                 鍦≒reprocessor Definitions妗嗕腑錛屽湪褰撳墠鏂囨湰鐨勬渶鍚庯紝杈撳叆
                錛孻YDEBUG
娉?瀵瑰簲鍒癡C 2005涓篊/C++->Preprocessor->Preprocessor Definitions.
錛?錛?nbsp;      閫夋嫨Link閫夐」鍗★紝鍦–ategory涓嬫媺鍒楄〃妗嗕腑閫夋嫨General銆?br>                 鍦∣bject/Library Modules妗嗕腑錛屽湪褰撳墠鏂囨湰鐨勫悗闈紝杈撳叆yld.lib
娉?VC 6涓殑Object/Library Modules瀵瑰簲鍒癡C 2005涓篜ropert->Configuration Properties->Linker->Input->Additional Dependencies ,鎵句簡濂戒箙.
錛?錛?nbsp;      鍦⊿ettings for涓嬫媺鍒楄〃妗嗕腑閫夋嫨Win32 Release銆?br>錛?錛?nbsp;    閲嶅絎?姝ョ殑宸ヤ綔銆?br>錛?錛?nbsp;  鐐瑰嚮OK鎸夐挳錛孭roject Settings瀵硅瘽妗嗚緗畬姣曘?

   榪欐牱璁劇疆涔嬪悗鎴戜滑灝卞彲浠ョ敤vc++緙栬瘧Parser Generator 鐢熸垚鐨刢鏂囦歡浜嗐傚叿浣撲負(fù)錛?br>鍏堟墦寮Parser Generator 闆嗘垚寮鍙戠幆澧冦傜偣鍑籔roject鑿滃崟錛岀偣鍑諱笅鎷夎彍鍗曚腑鐨凱arseWizard鑿滃崟錛屼竴璺笅鍘誨緩绔嬩竴涓伐紼嬨傜劧鍚庣偣鍑籶roject鑿滃崟涓嬬殑鐨凴ebuild All銆傚湪欏圭洰鏂囦歡澶逛笅灝辯敓鎴愪簡鐩稿簲c鏂囦歡涓巋鏂囦歡銆?br>鍐嶇敤VC++寤虹珛涓涓┖鎺у埗鍙板伐紼嬶紝鐒跺悗鎶婄敤鐢≒arser Generator
鐢熸垚鐨刢鏂囦歡鍜屽ご鏂囦歡鍔犲叆宸ョ▼涓傛帴鐫瀵筕C++榪涜涓婇潰鎵璇寸殑欏圭洰璁劇疆錛岀劧鍚庡氨鍙互緙栬瘧榪愯浜嗐傛柊鎵嬪彲浠ヤ嬌鐢╬arser generator 鑷甫鐨勮寖渚嬶紝榪欐牱鏂逛究媯(gè)楠岀幆澧冪殑閰嶇疆鏄惁姝g‘.



鑲ヤ粩 2008-05-17 00:33 鍙戣〃璇勮
]]>
Yacc &amp; Lexhttp://m.shnenglu.com/woaidongmao/archive/2008/05/17/50117.html鑲ヤ粩鑲ヤ粩Fri, 16 May 2008 16:20:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/05/17/50117.htmlhttp://m.shnenglu.com/woaidongmao/comments/50117.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/05/17/50117.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/50117.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/50117.html 

yacc(Yet Another Compiler Compiler)錛屾槸Unix/Linux涓婁竴涓敤鏉ョ敓鎴愮紪璇戝櫒鐨勭紪璇戝櫒錛堢紪璇戝櫒浠g爜鐢熸垚鍣級(jí)銆倅acc鐢熸垚鐨勭紪璇戝櫒涓昏鏄敤C璇█鍐欐垚鐨勮娉曡В鏋愬櫒錛圥arser錛夛紝闇瑕佷笌璇嶆硶瑙f瀽鍣↙ex涓璧蜂嬌鐢紝鍐嶆妸涓ら儴浠戒駭鐢熷嚭鏉ョ殑C紼嬪簭涓騫剁紪璇戙倅acc鏈潵鍙湪Unix緋葷粺涓婃墠鏈夛紝浣嗙幇鏃跺凡鏅亶縐繪寰Windows鍙?qiáng)鍏朵粬邈^鍙般?br>鍒嗘瀽紼嬪簭鐢熸垚鍣?parser generator)鏄竴涓寚瀹氭煇涓牸寮忎腑鐨勪竴縐嶈璦鐨勮娉曚綔涓哄畠鐨勮緭鍏ワ紝騫朵負(fù)璇ョ璇█浜х敓鍒嗘瀽榪囩▼浠ヤ綔涓哄畠鐨勮緭鍑虹殑紼嬪簭銆傚湪鍘嗗彶涓婏紝鍒嗘瀽紼嬪簭鐢熸垚鍣ㄨ縐頒綔緙栬瘧-緙栬瘧紼嬪簭( compiler- compiler )錛岃繖鏄敱浜庢寜鐓ц寰嬪彲灝嗘墍鏈夌殑緙栬瘧姝ラ浣滀負(fù)鍖呭惈鍦ㄥ垎鏋愮▼搴忎腑鐨勫姩浣滄潵鎵ц銆傜幇鍦ㄧ殑瑙傜偣鏄皢鍒嗘瀽紼嬪簭浠呰冭檻涓虹紪璇戝鐞嗙殑涓涓儴鍒嗭紝鎵浠ヨ繖涓湳璇篃灝辨湁浜涜繃鏃朵簡銆傚悎騫?LALR(1) 鍒嗘瀽綆楁硶鏄竴縐嶅父鐢ㄧ殑鍒嗘瀽鐢熸垚鍣紝瀹冭縐頒綔 Yacc( yet another compiler- compiler )銆傜粰鍑?Yacc 鐨勬璨屾潵錛屽皢浣跨敤Yacc涓?TINY 璇█寮鍙戜竴涓垎鏋愮▼搴忋?br>浣滀負(fù) Yacc 瀵硅鏄庢枃浠朵腑鐨?%token NUMBER 澹版槑鐨勫搴斻俌acc 鍧氭寔瀹氫箟鎵鏈夌殑絎﹀彿璁板彿鏈韓錛岃屼笉鏄粠鍒殑鍦版柟寮曞叆涓涓畾涔夈備絾鏄嵈鏈夊彲鑳介氳繃鍦ㄨ鍙峰0鏄庝腑鐨勮鍙峰悕涔嬪悗涔﹀啓涓涓兼潵鎸囧畾灝嗚祴緇欒鍙風(fēng)殑鏁板瓧鍊箋?br>yacc鐨勮緭鍏ユ槸宸寸鏂寖寮忥紙BNF錛夎〃杈劇殑璇硶瑙勫垯浠ュ強(qiáng)璇硶瑙勭害鐨勫鐞嗕唬鐮侊紝Yacc杈撳嚭鐨勬槸鍩轟簬琛ㄩ┍鍔ㄧ殑緙栬瘧鍣紝鍖呭惈杈撳叆鐨勮娉曡綰︾殑澶勭悊浠g爜閮ㄥ垎銆?br>yacc鏄紑鍙戠紪璇戝櫒鐨勪竴涓湁鐢ㄧ殑宸ュ叿,閲囩敤LALR(1)璇硶鍒嗘瀽鏂規(guī)硶銆?br>Yacc鏈鍒濈敱AT&T鐨凷teven C. Johnson涓篣nix鎿嶄綔緋葷粺寮鍙戯紝鍚庢潵涓浜涘吋瀹圭殑紼嬪簭濡侭erkeley Yacc錛孏NU bison錛孧KS yacc鍜孉braxas yacc闄嗙畫鍑虹幇銆傚畠浠兘鍦ㄥ師鍏堝熀紜涓婂仛浜嗗皯璁告敼榪涙垨鑰呭鍔狅紝浣嗘槸鍩烘湰姒傚康鏄浉鍚岀殑銆?br>鐢變簬鎵浜х敓鐨勮В鏋愬櫒闇瑕佽瘝娉曞垎鏋愬櫒閰嶅悎錛屽洜姝acc緇忓父鍜岃瘝娉曞垎鏋愬櫒鐨勪駭鐢熷櫒鈥斺斾竴鑸氨鏄疞ex鈥斺旇仈鍚堜嬌鐢ㄣ侷EEE POSIX P1003.2 鏍囧噯瀹氫箟浜哃ex鍜孻acc鐨勫姛鑳藉拰闇姹傘?br>http://dickey.his.com/byacc/byacc.html Berkeley Yacc 涓鑸涓烘槸鐩墠鏈濂界殑yacc鍙樼銆備笌bison鐩告瘮錛岄伩鍏嶄簡瀵圭壒瀹氱紪璇戝櫒鐨勪緷璧栥?br>http://www.informatik.uni-freiburg.de/proglang/software/essence/ Essence錛孲cheme鐨凩R(1)璇硶瑙f瀽鍣ㄧ殑鐢熸垚鍣?br>http://download.plt-scheme.org/scheme/plt/collects/parser-tools/ 鐢ㄤ簬DrScheme鐨勮娉曡В鏋愬伐鍏?br>http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/ Coco/R Java鍜孋#鐨勬壂鎻忓拰瑙f瀽鍣?br>http://mhss.nease.net/unix/yacc.html Yacc: 鍙︿竴涓紪璇戝櫒鐨勭紪璇戝櫒,Stephen C. Johnson  

 

IBM鐨勫揩閫熷叆闂?/font>

http://www.ibm.com/developerworks/cn/linux/sdk/lex/

 

windows涓嬬殑lex涓巠acc宸ュ叿

鍙墍浠ユ帹鑽愬畠鏄洜涓哄畠鐢熸垚鐨刢鏂囦歡鍙互鍦╲c++涓嬮氳繃緙栬瘧銆?br>     涓嬭澆鍦板潃 http://www.bumblebeesoftware.com/downloads.htm
涓嬭澆涔嬪悗錛岃В鍘嬬緝錛岀劧鍚庡畨瑁呫傛墦寮闆嗘垚寮鍙戠幆澧冿紝鐐歸」鐩甈roject鑿滃崟錛屽湪涓嬫媺鑿滃崟涓塋ibBuilder錛屽脊鍑篖ibBuilder瀵硅瘽妗嗛夋嫨灞炴ф寜閽?br>寮瑰嚭compiler properties 瀵硅瘽妗嗭紝
Name 閫夋嫨Visual C++ (32-bit)
Directory :msvc32
options:
渚濇涓?br>vc++鐗堟湰(Versoin 7(.net))銆?br>鏄惁鏀寔unicode鐮併?br>鏄惁鎶妛_char_t浣滀負(fù)鍐呭緩綾誨瀷銆?br>涓嬭竟鏄疺C鐨勫悇縐嶇洰褰曪細(xì)
渚濇涓?br>Compiler Bin Directory (C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\BIN)
Compiler Bin Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\COMMON7\IDE)
Compiler Include Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\INCLUDE)
Compiler Include Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\PLATFORMSDK\INCLUDE)
Compiler Library Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\LIB)
Compiler Library Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\PLATFORMSDK\LIB)
娉ㄦ剰錛氭嫭鍙烽噷杈圭殑鏄垜鑷繁緙栬瘧鍣ㄥ畨瑁呯洰褰曪紝涔熻浣犵殑鍜屾垜鐨勪笉涓鏍鳳紝闇瑕佸仛鐩稿簲鐨勮皟鏁淬?br>鎵鏈夌殑榪欎簺璁劇疆瀹屾垚涔嬪悗鐐筼k銆傝繑鍥濴ibBuilder銆傜偣Build灝卞彲浠ョ紪璇憊c++浣跨敤鐨刲ex涓巠acc鐨刲ib搴撱傜敓鎴愬簱鏂囦歡鍦ㄨ蔣浠跺畨瑁呯洰褰曚笅鐨凞:\Parser Generator 2\Cpp\Lib\msvc32鐩綍涓嬨?br>鐒跺悗鎴戜滑鎴戜滑鍦╲c++鐜璁劇疆涓鍔犲寘鍚枃浠剁洰褰旸:\Parser Generator 2\Cpp\Include
lib搴撶洰褰旸:\Parser Generator 2\Cpp\Lib\msvc32
鍏蜂綋璁劇疆
鎵撳紑VC++.net闆嗘垚寮鍙戠幆澧冦?br>鐐瑰伐鍏瘋彍鍗?br>涓嬫媺鑿滃崟涓偣閫夐」鑿滃崟銆?br>寮瑰嚭妗嗕腑鐐瑰乏杈瑰垪琛ㄦ涓殑projects錛岀劧鍚庣偣鍑籿c++鐩綍
鍦ㄦ樉紺轟互涓嬪唴瀹圭洰褰曟爣絳句笅鐨勫垪琛ㄦ涓?#8220;閫夊寘鍚洰褰?#8221;榪涜璁劇疆錛岄?#8220;搴撴枃浠?#8221;榪涜璁劇疆銆?br>鍏蜂綋璁劇疆灝辨槸鐐瑰嚮鍒楄〃妗嗕笅杈逛簲涓寜閽腑鐨勭浜屼釜鎸夐挳錛屽氨鍔犲叆涓琛岋紝褰撻夋嫨“鍖呭惈鐩綍”鐨勬椂鍊欏~鍏:\Parser Generator 2\Cpp\Include錛屽綋閫夋嫨“搴撴枃浠?#8221;鐨勬椂鍊欏~鍏:\Parser Generator 2\Cpp\Lib\msvc32錛屼篃鍙互鐐瑰彸杈圭殑嫻忚鎸夐挳榪涜閫夋嫨銆?br>榪欐牱璁劇疆涔嬪悗鎴戜滑灝卞彲浠ョ敤vc++緙栬瘧鐢≒arser Generator 2鐢熸垚鐨刢鏂囦歡銆傚叿浣撲負(fù)
鎵撳紑Parser Generator 2闆嗘垚寮鍙戠幆澧冦?br>鐐瑰嚮Project鑿滃崟錛岀偣鍑諱笅鎷夎彍鍗曚腑鐨凱arseWizard鑿滃崟錛屼竴璺笅鍘誨緩绔嬩竴涓伐紼嬨傜劧鍚庣偣鍑籶roject鑿滃崟涓嬬殑鐨凴ebuild All銆傚湪欏圭洰鏂囦歡澶逛笅灝辯敓鎴愪簡鐩稿簲c鏂囦歡涓巋鏂囦歡銆?br>鐢╒C++寤虹珛涓涓┖鎺у埗鍙板伐紼嬶紝鐒跺悗鎶婄敤鐢≒arser Generator 2鐢熸垚鐨刢鏂囦歡鍔犲叆宸ョ▼涓傛渶鍚庡紩鍏ュ搷搴旂殑搴撴枃浠訛紝灝辨槸鎴戜滑鍦―:\Parser Generator 2\Cpp\Lib\msvc32鐩綍涓嬬敓鎴愮殑lex涓巠acc搴撴枃浠躲傛帴鐫緙栬瘧錛屽鏋滄垚鍔燂紝閭d箞涓囦簨澶у悏銆?



鑲ヤ粩 2008-05-17 00:20 鍙戣〃璇勮
]]>
C++鐨勮瘝娉曞垎鏋愬櫒http://m.shnenglu.com/woaidongmao/archive/2008/05/17/50114.html鑲ヤ粩鑲ヤ粩Fri, 16 May 2008 16:09:00 GMThttp://m.shnenglu.com/woaidongmao/archive/2008/05/17/50114.htmlhttp://m.shnenglu.com/woaidongmao/comments/50114.htmlhttp://m.shnenglu.com/woaidongmao/archive/2008/05/17/50114.html#Feedback0http://m.shnenglu.com/woaidongmao/comments/commentRss/50114.htmlhttp://m.shnenglu.com/woaidongmao/services/trackbacks/50114.html 

[lexical_analyzer.h]

#ifndef LEXICAL_ANALYZER_H
#define LEXICAL_ANALYZER_H

enum lexical_status
{
    status_success,
    status_eof,
    status_invalid_char,
    status_unknown = -1,
};

enum token_category
{
    token_error,
    token_keyword,
    token_identifier,
    token_number,
    token_char,
    token_string,
    token_operator,
    token_punctuator,
};

struct token
{

    token_category category;
    std::string value;
};

class lexical_analyzer
{
public:
    explicit lexical_analyzer(std::istream& ifs);
    lexical_status get_token(token& t);
    int current_line() const;
private:
    bool filter_space();
    bool filter_comment();
    std::string get_hex_string();
    std::string get_digital_string();
    std::string get_string(char delimiter);
    bool is_keyword(const std::string& str);
    int get_char();
    int peek_char();
    void putback(char ch);
    void skip_char();
private:
    std::istream* m_pstream;
    int m_line;
};

inline lexical_analyzer::lexical_analyzer(std::istream& ifs)
    :m_pstream(&ifs), m_line(1)
{
}

inline int lexical_analyzer::current_line() const
{
    return m_line;
}

inline int lexical_analyzer::peek_char()
{
    return m_pstream->peek();
}

inline void lexical_analyzer::skip_char()
{
    get_char();
}

#endif//LEXICAL_ANALYZER_H




[lexical_analyzer.cpp]


#include <fstream>
#include "lexical_analyzer.h"

int lexical_analyzer::get_char()
{
    int ch = m_pstream->get();
    if (ch=='\n')
        ++m_line;
    return ch;
}

void lexical_analyzer::putback(char ch)
{
    if (ch=='\n')
        --m_line;
    m_pstream->putback(ch);
}

bool lexical_analyzer::filter_space()
{
    bool result = false;
    char ch = peek_char();
    if (isspace(ch))
    {
        do
        {
            skip_char();
            ch = peek_char();
        }
        while (isspace(ch));
        return true;
    }
    return false;
}

bool lexical_analyzer::filter_comment()
{
    if(peek_char()=='/')
    {
        skip_char();
        char ch = get_char();
        if(ch=='/')
        {
            while(peek_char()!='\n')
            {
                skip_char();
            }
        }
        else if(ch=='*')
        {
            for(;;)
            {
                if(get_char()=='*' && get_char()=='/')
                    break;
            }
        }
        else
        {
            putback('/');
            return false;
        }
        return true;
    }
    else
    {
        return false;
    }
}

bool lexical_analyzer::is_keyword(const std::string& str)
{
    static const char* const keywords[]=
    {
        "asm",      "auto",         "bad_cast",     "bad_typeid",
        "bool",     "break",        "case",         "catch",
        "char",     "class",        "const",        "const_cast",
        "continue", "default",      "delete",       "do",
        "double",   "dynamic_cast", "else",         "enum",
        "except",   "explicit",     "extern",       "false",
        "finally",  "float",        "for",          "friend",
        "goto",     "if",           "inline",       "int",
        "long",     "mutable",      "namespace",    "new",
        "operator", "private",      "protected",    "public",
        "register", "reinterpret_cast",     "return",   "short",
        "signed",   "sizeof",       "static",       "static_cast",
        "struct",   "switch",       "template",     "this",
        "throw",    "true",         "try",          "typedef",
        "typeid",   "typename",     "union",        "unsigned",
        "using",    "virtual",      "void",         "volatile",
        "while", 
    };

    for(int i=0; i<sizeof(keywords)/sizeof(keywords[0]); i++)
    {
        if(str.compare(keywords[i])==0)
            return true;
    }

    return false;
}

std::string lexical_analyzer::get_string(char delimiter)
{
    std::string result;
    for(;;)
    {
        char ch = get_char();
        if(ch==delimiter)
            break;
        else if(ch=='\\')
        {
            ch = get_char();
            switch(ch)
            {
            case '\"':
                ch = '\"';
                break;
            case '\'':
                ch = '\'';
                break;
            case 'r':
                ch = '\r';
                break;

            case 'n':
                ch = '\n';
                break;
            case 'v':
                ch = '\v';
                break;
            case 't':
                ch = '\t';
                break;
            case 'a':
                ch = '\a';
                break;
            case 'b':
                ch = '\b';
                break;
            case 'f':
                ch = '\f';
                break;
            case '\r':                          // line splice
            case '\n':
                continue;
                break;
            default:
                break;
            }

            if(ch=='x' || ch=='X')
            {
                std::string s = get_hex_string();
                int x = 0;
                for(int i=0; i<s.length(); i++)
                {
                    x *= 16;
                    if(s[i]>='A' && s[i]<='F')
                        x += s[i]-'A' + 10;
                    else if(s[i]>='a' && s[i]<='f')
                        x += s[i]-'a' + 10;
                    else
                        x += s[i]-'0';
                }
                ch = (char)x;
            }

        }

        result += ch;
    }

    return result;
}

std::string lexical_analyzer::get_digital_string()
{
    std::string result;
    char ch;
    while(isdigit(ch=get_char()))
    {
        result += ch;
    }
    putback(ch);

    return result;
}

std::string lexical_analyzer::get_hex_string()
{
    std::string result;
    char ch;
    while(isxdigit(ch=get_char()))
    {
        result += ch;
    }
    putback(ch);

    return result;
}

lexical_status lexical_analyzer::get_token(token& t)
{
    if(m_pstream->eof())
        return status_eof;


    while(filter_space() || filter_comment())
    {
    }
    while(filter_comment() || filter_space())
    {
    }

    if(m_pstream->eof())
        return status_eof;

    t.value.resize(0);

    char ch = get_char();
    if(ch=='_' || isalpha(ch) || isdigit(ch) || ch=='$')
    {
        t.category = token_identifier;
        do
        {
            t.value += ch;
            ch = get_char();
        }while(ch=='_' || isalpha(ch) || isdigit(ch) || ch=='$');
        putback(ch);
    }
    else if(isdigit(ch))
    {
        t.category = token_number;
        t.value += ch;
        ch = get_char();
        if(ch=='x' || ch=='X')
        {
            t.value += ch;
            t.value += get_hex_string();
        }
        else if(isdigit(ch))
        {
            t.value += ch;
            t.value += get_digital_string();
        }
    }
    else if(ch=='\"')
    {
        t.category = token_string;
        t.value = get_string('\"');
    }
    else if(ch=='\'')
    {
        t.category = token_char;
        t.value = get_string('\'');
    }
    else
    {
        t.category = token_operator;
        if(ch=='=' || ch=='&' || ch=='|' || ch==':')
        {
            t.value = ch;
            if(peek_char()==ch)
            {
                t.value += ch;
                skip_char();
            }
        }
        else if(ch=='+' || ch=='-')
        {
            t.value = ch;
            char cc = get_char();
            if(cc==ch)
            {
                t.value += ch;
            }
            else if(cc=='=')
            {
                t.value += '=';
            }
            else if(ch=='-' && cc=='>')
            {
                t.value += '>';                         // ->
                cc = peek_char();
                if(cc=='*')
                {
                    skip_char();

                    t.value += '*';                     // ->*
                }
            }
            else
            {
                putback(cc);
            }
        }
        else if(ch=='*' || ch=='/' || ch=='%' || ch=='^' || ch=='!')
        {

            t.value = ch;
            ch = peek_char();
            if(ch=='=')
            {
                t.value+='=';
                skip_char();
            }
        }
        else if(ch=='<' || ch=='>')
        {
            t.value = ch;
            char cc = get_char();
            if(ch==cc)                              // << >>
            {
                t.value += cc;
                cc = peek_char();
                if(cc=='=')                         // <<= >>=
                {
                    skip_char();
                    t.value += '=';
                }
            }
            else if(cc=='=')
            {
                t.value += '=';
            }
            else
            {
                putback(cc);
            }
        }
        else if(ch=='.')
        {
            t.value = '.';                          // .
            ch = get_char();
            if(ch=='*')
            {
                t.value += '*';                     // .*
            }
            else if(ch=='.')
            {
                char cc = get_char();
                if(cc=='.')                         // ...
                {
                    t.value += "..";
                }
                else
                {
                    putback(cc);
                    putback(ch);
                }
            }
            else
            {
                putback(ch);
            }
        }
        else if(ch=='~' || ch =='?' ||
            ch=='[' || ch==']' ||
            ch=='(' || ch==')'
            )
        {
            t.value = ch;
        }
        else if(ch==';' || ch=='{'|| ch=='}'|| ch==','|| ch=='#' )
        {
            t.category = token_punctuator;
            t.value = ch;
        }
        else if(ch=='\\')
        {
            ch = peek_char();
            if(ch=='\r' || ch=='\n')
            {
                skip_char();
            }
            else
            {
                t.category = token_error;
                t.value = ch;
            }
        }
        else
        {
            t.category = token_error;
            t.value = ch;
            return status_invalid_char;
        }
    }

    if(t.category == token_identifier && is_keyword(t.value))
    {
        t.category = token_keyword;
    }

    return status_success;
}



[main.c], 嫻嬭瘯紼嬪簭
#include <fstream>
#include <string>
#include <iostream>

#include "lexical_analyzer.h"

int main()
{
    std::ifstream ifs("D:\\ThreadFuncs.cpp", std::ios::in | std::ios::binary);
    lexical_analyzer lex(std::cin);
    //lexical_analyzer lex(ifs);
    std::ofstream ofs("D:\\out.cpp");
    //std::ostream& os = ofs;
    std::ostream& os = std::cout;
    token t;
    lexical_status status;
    while((status=lex.get_token(t))!=status_eof)
    {
        if(status==status_success)
            os << t.value << '\n';
        else if(status==status_invalid_char)
            std::cerr << "Line:" << lex.current_line() << "invalid_char: " << t.value << '\n';
    }
    return 0;
}



鑲ヤ粩 2008-05-17 00:09 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美激情偷拍| 欧美性理论片在线观看片免费| 久久久久久成人| 一本色道久久精品| 亚洲人午夜精品| 亚洲福利视频在线| 最新国产の精品合集bt伙计| 好吊色欧美一区二区三区视频| 国产精品综合色区在线观看| 国产婷婷色一区二区三区在线| 国产精品视频1区| 国产一区清纯| 亚洲大胆视频| 亚洲午夜在线观看视频在线| 亚洲欧美视频一区| 久久午夜av| 亚洲国产清纯| 亚洲视频一二区| 久久久久久黄| 欧美精品导航| 韩国欧美一区| 这里只有精品视频| 欧美a级大片| 亚洲图片激情小说| 免费视频一区二区三区在线观看| 亚洲视频在线视频| 久久成人免费| 国产欧美日韩在线视频| 久久在线视频在线| 欧美激情女人20p| 欧美91福利在线观看| 亚洲日本在线观看| 欧美成人久久| 亚洲一区激情| 亚洲视频图片小说| 亚洲啪啪91| 老司机成人网| 欧美久久电影| 国产九九精品视频| 亚洲黄色小视频| 亚洲视频久久| 午夜精彩国产免费不卡不顿大片| 久久影音先锋| 亚洲欧美日韩精品| 国产精品夜色7777狼人| av72成人在线| 亚洲精品在线二区| 欧美成人精品影院| 夜夜嗨av一区二区三区中文字幕 | 久久久久国产精品一区二区| 亚洲在线网站| 尤物99国产成人精品视频| 久热精品视频在线观看| 久久综合网色—综合色88| 亚洲国产欧美国产综合一区| 欧美波霸影院| 国产精品久久久久毛片大屁完整版| 亚洲综合99| 亚洲毛片av| 亚洲国产日韩在线一区模特| 欧美日韩久久| 久久久久国产精品人| 欧美精品一卡二卡| 久久精品30| 国产精品嫩草久久久久| 亚洲国产日韩欧美| 国产在线欧美| 亚洲小说欧美另类社区| 一区二区三区www| 美女主播一区| 久久综合中文色婷婷| 国产精品资源在线观看| 亚洲天堂激情| 亚洲女性喷水在线观看一区| 欧美激情一区二区三区| 欧美韩日视频| 亚洲精品免费一二三区| 免费亚洲一区二区| 欧美福利专区| 一本久道久久综合中文字幕| 蜜桃av一区| 亚洲人成网站影音先锋播放| 亚洲国产精品久久久久久女王| 久久久人成影片一区二区三区| 久久久久.com| 日韩视频一区二区在线观看| 欧美精品色综合| 一本大道久久a久久综合婷婷| 日韩午夜免费| 国产伦精品一区二区三区高清 | 精品99视频| 女主播福利一区| 亚洲伦理一区| 中日韩男男gay无套| 国产乱码精品一区二区三区不卡 | 国产自产高清不卡| 久久久亚洲国产天美传媒修理工| 欧美插天视频在线播放| av成人国产| 在线观看成人av电影| 国产精品欧美精品| 欧美成人精品在线视频| 亚洲欧美一区在线| 最新精品在线| 久久一区二区三区四区| 亚洲先锋成人| 91久久国产综合久久| 国产伊人精品| 国产日韩欧美不卡在线| 欧美性生交xxxxx久久久| 美乳少妇欧美精品| 久久午夜电影网| 久久精品99| 久久av最新网址| 久久国产精品久久国产精品| 一本色道久久综合狠狠躁篇的优点| 欧美 日韩 国产 一区| 欧美在线影院| 久久久久欧美精品| 玖玖国产精品视频| 免费在线日韩av| 欧美成人亚洲| 亚洲久色影视| 亚洲欧美在线免费| 欧美在线free| 蜜臀91精品一区二区三区| 欧美本精品男人aⅴ天堂| 欧美韩日一区二区| 亚洲女同在线| 欧美阿v一级看视频| 国产精品毛片在线| 国产精品日韩在线播放| 韩国三级在线一区| 99视频+国产日韩欧美| 亚洲午夜一区二区三区| 久久久久国产精品一区三寸| 亚洲第一页在线| 亚洲免费一区二区| 久久亚洲精品一区二区| 欧美理论电影在线播放| 国产欧美日本一区二区三区| 亚洲国产欧洲综合997久久| 午夜激情一区| 亚洲精品久久久久久久久久久| 亚洲一区在线视频| 美女黄毛**国产精品啪啪| 国产精品一区二区三区四区五区| 国产日韩精品一区二区三区 | 久久精品人人做人人爽电影蜜月| 巨胸喷奶水www久久久免费动漫| 欧美黑人在线观看| 一区在线视频观看| 欧美在线观看视频在线| 亚洲神马久久| 欧美激情在线| 日韩视频在线永久播放| 亚洲国产精品一区二区第一页 | 美女图片一区二区| 先锋影音网一区二区| 国产麻豆精品久久一二三| 亚洲一区国产| 亚洲图片激情小说| 国产日韩专区在线| 久久久精品动漫| 欧美一区二区大片| 国内精品国产成人| 欧美电影免费网站| 欧美a级在线| 欧美va亚洲va国产综合| 国语自产精品视频在线看抢先版结局| 亚洲欧美日韩国产中文在线| 欧美一区二区在线| 亚洲精品少妇网址| 午夜视频在线观看一区二区| 狠狠色狠狠色综合人人| 欧美激情按摩| 欧美日韩另类视频| 久久精品导航| 欧美日韩成人免费| 久久精品水蜜桃av综合天堂| 欧美国产精品劲爆| 久久精品亚洲国产奇米99| 免费观看欧美在线视频的网站| 亚洲影院免费观看| 欧美激情一区在线| 欧美成人在线影院| 国产欧美一二三区| 亚洲免费av电影| 亚洲国产精品久久久| 亚洲欧美怡红院| 欧美亚洲一区在线| 欧美日韩另类一区| 日韩视频在线观看| 亚洲精品一区二区三区av| 久久九九免费| 欧美成年人网| 亚洲国产一区二区三区高清| 久久av资源网| 免费久久精品视频| 亚洲成色www8888|