私はLexを学ぼうとしています。私はファイルを読み込み、トークンを認識したいというシンプルなプログラムを持っています。Lex認識トークン
今、いくつかのエラーが発生しています。ファイルにはトークンを認識するための行が複数あるので問題はあると思いますか?
ここでは、ここでファイル
fd 3x00
bk
setc 100
int xy3 fd 10 rt 90
は、私が達成しようとしています出力されます。ここで
Keyword: fd
Illegal: 3x00
Keyword: bk
Keyword: setc
Number: 100
Keyword: int
は私のプログラムである:ここ
%{
/* Comment */
#include <stdio.h>
#include <stdlib.h>
%}
%%
fd {printf("Keyword: fd\n");}
[0-9][a-z][0-9] {printf("Illegal: 3x00\n");}
bk {printf("Keyword: bk\n");}
setc[0-9] {printf("Keyword: setc\n Number: %s\n", yytext);}
int {printf("Keyword: int\n");}
xy3 {printf("ID: xy3\n");}
fd[0-9] {printf("Keyword: fd\n Number %s\n", yytext);}
rt[0-9] {printf("Keyword: rt \n Number %s\n", yytext);}
%%
main(argc, argv)
int argc;
char** argv;
{
if(argc > 1)
{
FILE *file;
file = fopen(argv[1], "r");
if(!file)
{
fprintf(stderr, "Could not open %s \n", argv[1]);
exit(1);
}
yyin = file;
}
yylex();
}
は私がエラーでありますコンパイルしようとすると:
In function 'yylex':
miniStarLogo.l:11: error: expected expression before '[' token
miniStarLogo.l:11: error: 'a' undeclared (first use in this function)
miniStarLogo.l:11: error: (Each undeclared identifier is reported only once
miniStarLogo.l:11: error: for each function it appears in.)
miniStarLogo.l:11: error: expected ';' before '{' token
miniStarLogo.l:13: error: expected expression before '[' token
miniStarLogo.l:13: error: expected ';' before '{' token
は私のprintfステートメントのエラーですか? はあなたが
私はflex
(2.5.35)と
gcc
(4.6.1)でのMacOS X(10.7.2)で、あなたのコードのコピーをコンパイル
コンパイルエラーのようですが、コンパイルや実行に問題がありますか?それはコンパイルされ、私のために実行されますが、出力はあなたが望むものではありません。 – Kevin
それをコンパイルしようとするとエラーが発生します。私はcc lex.yy.c -o myprog -llを試しました –
どのようにコンパイルして実行できましたか?どのようなコマンドを使用しましたか? –