【发布时间】:2013-12-07 20:56:25
【问题描述】:
我正在尝试根据这些规则解析语句以查看它们是否有效:
任务: id = exp ;
表达式: id op id {op id}
id是数字和char的组合,第一个位置是char。
当我的 in.txt 文件中有类似内容时出现语法错误:hello = three3
但这不应该是语法错误,然后当我输入类似:hello = =
不显示语法错误,但应该。我做错了什么?
莱克斯:
%{
#include "y.tab.h"
#include <stdio.h>
%}
%%
[ \t\n]+ ;
[a-zA-Z][a-zA-Z0-9]* {
ECHO;
return ID;
}
%%
YACC:
%{
#include <stdio.h>
extern FILE * yyin;
%}
%token ID
%left '+' '-'
%left '*' '/' '%'
%right ';'
%%
assignment: expression
|
ID '=' expression
;
expression: ID
|
expression '*' expression
|
expression '/' expression
|
expression '%' expression
|
expression '+' expression
|
expression '-' expression
|
'(' expression ')'
;
%%
int main(void) {
yyin = fopen("in.txt", "r");
yyparse();
fclose(yyin);
return 0;
}
【问题讨论】:
标签: parsing expression yacc lex