2012-11-11 90 views
0

Heloo EveryBody, 我在lex語言中有一個簡單的代碼,我嘗試通過「bison -d hello.l」來運行它,但是我得到錯誤! 我收到以下錯誤。這個簡單的Lex例子有什麼問題?

有人能讓我知道我錯了嗎?

bison -d hello.l 

hello.l:4.1-5: syntax error, unexpected identifier 

代碼:

%{ 
#include <math.h> 
%} 
DIGIT [0-9] 
ID  [a-z][a-z0-9]* 

%% 

    {DIGIT}+ { 
       printf("An integer: %s (%d)\n", yytext, 
         atoi(yytext)); 
       } 

    {DIGIT}+"."{DIGIT}*  { 
       printf("A float: %s (%g)\n", yytext, 
         atof(yytext)); 
       } 

    if|then|begin|end|procedure|function  { 
       printf("A keyword: %s\n", yytext); 
       } 

    {ID}  printf("An identifier: %s\n", yytext); 

    "+"|"-"|"*"|"/" printf("An operator: %s\n", yytext); 

    "{"[\^{}}\n]*"}"  /* eat up one-line comments */ 

    [ \t\n]+   /* eat up whitespace */ 

    .   printf("Unrecognized character: %s\n", yytext); 

    %% 

    int main(int argc, char **argv) 
     { 
     ++argv, --argc; /* skip over program name */ 
     if (argc > 0) 
       yyin = fopen(argv[0], "r"); 
     else 
       yyin = stdin; 

     yylex(); 
     } 

回答

1

您正在嘗試編譯野牛一(F)輸入法文件。使用yylex或flex。

編輯:好的,更多的問題(我試圖編譯代碼):

  1. 規則必須開始在該行的開始,在他們面前沒有 空白(刪除空格在第9,14行等的開頭 )。

  2. 在文件的開頭添加%option noyywrap

  3. flex filename.l編譯文件。

  4. 然後編譯生成的.c文件。你不需要額外的頭文件。

+0

我用野牛來生成CONST.H文件! ,因爲當我想編譯lex.yy.c文件時,我得到一些像「未聲明的(首次在此函數中使用)」的錯誤! 當我在網上搜索我明白我需要一個Const.h文件,所以我想生成該文件。 我該怎麼做? – Cert

+0

這將是非常有用的知道*什麼*被報告是未申報的。 – JohnB

+0

9 C:\ Users \ Majid \ Desktop \ F \ hello.l'DIGIT'未聲明(首次在此函數中使用) – Cert

相關問題