我必须为类 c 语言创建一个词法和语法分析器。在这种语言中,我们将注释定义为“在符号 % 之后直到行尾存在的所有内容”。以下声明是否正确?
Flex
...
[%][^\n]*[\n] { return T_COMMENT; }
[\n] { return T_NEWLINE; }
Bison
...
comment:com text newline;
text: |name text|digit text;
...
com: T_COMMENT { printf("%s",yytext); };
newline: T_NEWLINE { printf("%s",yytext); };
我还需要定义引号“。以下是否正确(flex)?
"\"" { return T_QUOTE; }
flex 和 bison 输入文件中没有编译错误,但是当我使用用这种类似 c 语言编写的程序作为测试输入时,我在第 1 行得到了词法错误。这一行没有词法错误。我的程序必须以这样的方式开始:
"PROGRAM" { return T_PROGRAM; }
野牛
%start programma
%token T_PROGRAM
...
programma:PROGRAM name newline function STARTMAIN dec_var command ENDMAIN eof;
...
PROGRAM: T_PROGRAM { printf("%s",yytext); };
...
(大写的单词被定义为PROGRAM,因为它们是语言的一部分)我写错了吗?我认为问题在于换行定义,但我不确定。
提前感谢您的任何回答。对不起,很长的帖子。