我需要一些关于我在flex代码中遇到的问题的帮助。
我的任务:编写一个flex代码,用于识别编程语言的声明部分,如下所述。
让编程语言PL。其变量定义部分描述如下:
一开始我们必须以关键字" var"开头。写完这个关键字之后,我们必须编写用逗号","分隔的变量名(一个或多个)。然后冒号":"插入后,我们必须写一个变量类型(比如我的例子中的实数,布尔值,整数或字符),然后是分号&#34 ;;"。在执行前面的步骤后,有可能将新变量声明为新行(变量名用逗号分隔","后跟冒号":"后跟变量类型后跟分号&#34 ;;"),但我们不能使用" var"新行开头的关键字(" var"关键字写一次!!!)
E.g。
var number_of_attendants, sum: integer;
ticket_price: real;
symbols: char;
具体而言,我不知道如何定义每个声明部分必须仅使用' var'关键词。到现在为止,如果我开始直接声明一个变量的声明部分,比如x(没有在行的开头写入" var")那么就不会发生错误(不需要的状态)。
我目前的灵活代码如下:
%{
#include <stdio.h>
%}
VAR_DEFINER "var"
VAR_NAME [a-zA-Z][a-zA-Z0-9_]*
VAR_TYPE "real"|"boolean"|"integer"|"char"
SUBEXPRESSION [{VAR_NAME}[","{VAR_NAME}]*":"[ \t\n]*{VAR_TYPE}";"]+
EXPRESSION {VAR_DEFINER}{SUBEXPRESSION}
%%
^{EXPRESSION} {
printf("This is not a well-syntaxed expression!\n");
return 0;
}
{EXPRESSION} printf("This is a well-syntaxed expression!\n");
";"[ \t\n]*{VAR_DEFINER} {
printf("The keyword 'var' is defined once at the beginning of a new line. You can not use it again\n");
return 0;
}
{VAR_DEFINER} printf("A keyword: %s\n", yytext);
^{VAR_DEFINER} printf("Each and every declaration part must start with the 'var' keyword.\n");
{VAR_TYPE}";" printf("The variable type is: %s\n", yytext);
{VAR_NAME} printf("A variable name: %s\n", yytext);
","/[ \t\n]*{VAR_NAME} /* eat up commas */
":"/[ \t\n]*{VAR_TYPE}";" /* eat up single colon */
[ \t\n]+ /* eat up whitespace */
. {
printf("Unrecognized character: %s\n", yytext);
return 0;
}
%%
main(argc, argv)
int argc;
char** argv;
{
++argv, --argc;
if (argc > 0)
yyin = fopen(argv[0],"r");
else
yyin = stdin;
yylex();
}
我希望尽可能明确地做到这一点。
我期待着阅读你的答案!