flex
का उपयोग करता है (लगभग) POSIX "विस्तारित नियमित अभिव्यक्ति" वाक्य रचना।
[ \t\t\r]+
एक टाइपो है? मुझे लगता है कि आप वहां \n
चाहते हैं।
तरह [ \n\t\r]+
निश्चित रूप से चाहिए काम कुछ। उदाहरण के लिए, इस lexer (जो मैं lexer.l
के रूप में सहेज कर रखा है):
%{
#include <stdio.h>
%}
%option noyywrap
%%
[ \n\t\r]+ { printf("Whitespace: '%s'\n", yytext); }
[^ \n\t\r]+ { printf("Non-whitespace: '%s'\n", yytext); }
%%
int main(void)
{
yylex();
return 0;
}
... सफलतापूर्वक अपना उदाहरण इनपुट में खाली स्थान के लिए (जो मैं input.txt
के रूप में सहेज कर रखा है) से मेल खाता है:
$ flex lexer.l
$ gcc -o test lex.yy.c
$ ./test < input.txt
Non-whitespace: 'program'
Whitespace: '
'
Non-whitespace: '3.3'
Whitespace: ' '
Non-whitespace: '5'
Whitespace: ' '
Non-whitespace: '7'
Whitespace: '
'
Non-whitespace: '{'
Whitespace: ' '
Non-whitespace: 'comment'
Whitespace: ' '
Non-whitespace: '}'
Whitespace: '
'
Non-whitespace: 'string'
Whitespace: '
'
Non-whitespace: 'panic:'
Whitespace: ' '
Non-whitespace: 'cant'
Whitespace: ' '
Non-whitespace: 'happen'
Whitespace: '
'
स्रोत
2012-11-10 23:50:17
हाँ मेरा मतलब था \ n के बजाय \ \ t \ t \ r] + आपके उत्तर के लिए धन्यवाद, यह सही है :) – mrjasmin
सभी पंक्तियों को समाप्त करने के लिए '[\ n \ t \ r \ f] +' का उपयोग करें। ओमटिंग '\ f' विंडोज/डॉस फ़ाइल के अंत से मेल नहीं खाएगा। स्रोत: http://web.eecs.utk.edu/~bvz/cs461/notes/flex/ – ribamar