windows - विंडोज पर लेक्स/YACC फ़ाइलों को कैसे संकलित करें?




bison lex (6)

मैं अपनी फ़ाइलों ( .l फ़ाइल और .y फ़ाइल) को पार्स करने के लिए Lex और .l फाइल कर रहा हूं।

उन फ़ाइलों को कैसे संकलित करें और विंडोज़ प्लेटफ़ॉर्म में उनके लिए बराबर .c फ़ाइल कैसे बनाएं?

https://code.i-harness.com


आज तक (2011-04-05, 2017-11-29 को अपडेट किया गया) के लिए आपको सबसे अंतिम संस्करणों की आवश्यकता होगी:

  1. flex-2.5.4a-1.exe

  2. bison-2.4.1-setup.exe

  3. उसके बाद, नाम में रिक्त स्थान के बिना अपनी पसंद की निर्देशिका में एक पूर्ण इंस्टॉल करें । मेरा सुझाव C:\GnuWin32 कि C:\GnuWin32 । इसे डिफ़ॉल्ट (C: \ Program Files (x86) \ GnuWin32) में स्थापित करें क्योंकि बायसन को निर्देशिका नामों में रिक्त स्थान की समस्या है, कोष्ठक कहने की नहीं।

  4. इसके अलावा, डिफॉल्ट डायरेक्टरी में Dev-CPP स्थापित करने पर विचार करें ( C:\Dev-Cpp )

  5. उसके बाद, GCC के बिन निर्देशिका ( C:\Dev-Cpp\bin ) और flex\bison ( C:\GnuWin32\bin ) को शामिल करने के लिए PATH चर सेट करें। ऐसा करने के लिए, इसे कॉपी करें: ;C:\Dev-Cpp\bin;C:\GnuWin32\bin और इस आकृति के स्थान शो में परिभाषित PATH चर के अंत में जोड़ें:

    यदि आंकड़ा अच्छे रिज़ॉल्यूशन में नहीं है, तो आप यहां एक कदम-दर-चरण देख सकते हैं।

  6. एक प्रॉम्प्ट खोलें, cd डायरेक्टरी में जहाँ आपका ".l" और ".y" हैं, और उन्हें संकलित करें:

    1. flex hello.l
    2. bison -dy hello.y
    3. gcc lex.yy.c y.tab.c -o hello.exe

आप कार्यक्रम को चलाने में सक्षम होंगे। मैंने एक साधारण परीक्षण (बदनाम Hello World ) के लिए स्रोत बनाए:

Hello.l

%{

#include "y.tab.h"
int yyerror(char *errormsg);

%}

%%

("hi"|"oi")"\n"       { return HI;  }
("tchau"|"bye")"\n"   { return BYE; }
.                     { yyerror("Unknown char");  }

%%

int main(void)
{
   yyparse();
   return 0;
}

int yywrap(void)
{
   return 0;
}

int yyerror(char *errormsg)
{
    fprintf(stderr, "%s\n", errormsg);
    exit(1);
}

Hello.y

%{

#include <stdio.h>
#include <stdlib.h>
int yylex(void);
int yyerror(const char *s);

%}

%token HI BYE

%%

program: 
         hi bye
        ;

hi:     
        HI     { printf("Hello World\n");   }
        ;
bye:    
        BYE    { printf("Bye World\n"); exit(0); }
         ;

संपादित: परहेज "चेतावनी: yyerror और yylex की निहित परिभाषा"।

डिस्क्लेमर: याद रखें, यह उत्तर बहुत पुराना है (2011 के बाद से!) और यदि आप संस्करण और सुविधाओं में बदलाव के कारण समस्याओं में चलते हैं, तो आपको अधिक शोध की आवश्यकता हो सकती है, क्योंकि मैं इस उत्तर को अपडेट नहीं कर सकता। धन्यवाद और मुझे उम्मीद है कि यह आपके लिए एक अच्छा प्रवेश बिंदु होगा क्योंकि यह कई लोगों के लिए था।

अपडेट: यदि कुछ (वास्तव में छोटे बदलाव) किए जाने की आवश्यकता है, तो कृपया आधिकारिक रिपॉजिटरी को जीथब में देखें: https://github.com/drbeco/hellex

हैप्पी हैकिंग।


आप (शायद चाहते हैं) फ्लेक्स 2.5.4 हैं (कुछ लोग अब इसे "बनाए रख रहे हैं" और नए संस्करणों का उत्पादन कर रहे हैं, लेकिन आईएमओ उन्होंने इसे किसी भी वास्तविक कमियों को ठीक करने के लिए और अधिक करने के लिए किया है) और 1.9 1.9 (इसी तरह)। (2017-11-17 को संपादित करें: फ्लेक्स 2.5.4 किसी और स्रोत पर उपलब्ध नहीं है, और फ्लेक्स जीथब रिपॉजिटरी केवल 2.5.5 पर वापस जाती है। लेकिन आप जाहिरा तौर पर अभी भी इसे FTP पर एक Gnu ftp सर्वर से प्राप्त कर सकते हैं ftp://ftp.gnu.org/old-gnu/gnu-0.2/src/flex-2.5.4.tar.gz ।)

चूंकि यह अनिवार्य रूप से अनुशंसित होगा, इसलिए मैं बाइसन का उपयोग करने के खिलाफ चेतावनी दूंगा। बाइसन मूल रूप से रॉबर्ट कॉर्बेट द्वारा लिखा गया था, वही लड़का जिसने बाद में बायकाक लिखा था, और वह खुले तौर पर बताता है कि उस समय वह वास्तव में नहीं जानता था या समझ नहीं पा रहा था कि वह क्या कर रहा है। दुर्भाग्य से, युवा और मूर्ख होने के नाते, उन्होंने इसे जीपीएल के तहत जारी किया और अब जीपीएल प्रशंसकों ने इसे जीवन की बीमारियों के जवाब के रूप में धकेल दिया, हालांकि इसके खुद के लेखक का कहना है कि इसे मूल रूप से बीटा टेस्ट उत्पाद के रूप में सोचा जाना चाहिए - लेकिन दृढ़ जीपीएल प्रशंसकों के तर्क, बायकाक के लाइसेंस में "निशुल्क" के रूप में अर्हता प्राप्त करने के लिए पर्याप्त प्रतिबंध नहीं हैं!


मैं एक ही समस्या थी, यह एक बहुत ही सरल समाधान है।
'लेक्स' प्रोग्राम को निष्पादित करने के लिए कदम:

  1. उपकरण -> 'लेक्स फाइल कंपाइलर'
  2. उपकरण -> 'लेक्स बिल्ड'
  3. उपकरण -> 'खुला CMD'
  4. फिर कमांड प्रॉम्प्ट में टाइप करें 'name_of_file.exe' उदाहरण -> '1..exe'
  5. फिर पूरे इनपुट में प्रवेश करते हुए Ctrl + Z दबाएं और Enter दबाएं।

Example


यह भी ध्यान देने योग्य है कि WinFlexBison को Chocolatey पैकेज मैनेजर के लिए packaged किया गया है। स्थापित करें और फिर जाएं:

choco install winflexbison

... जो लिखने के समय में बाइसन 2.7 और फ्लेक्स 2.6.3 शामिल हैं।

वहाँ भी winflexbison3 (जो लिखने के समय) में Bison 3.0.4 और Flex 2.6.3 है।


वहाँ हमेशा Cygwin


सबसे आसान तरीका यह है कि इंस्टॉल करने के दौरान साइबरविन डाउनलोड करें और जीसीसी और फ्लेक्स पैकेज डाउनलोड करें। फिर उदाहरण के लिए एक lex फ़ाइल चलाने के लिए। abc.l

हम लिखते हैं

फ्लेक्स abc.l

gcc lex.yy.c -o abc.exe

./abc.exe





flex-lexer