hxuhack/compiler_project

关于Assignment2的问题

Opened this issue · 1 comments

1:Step1里的token具体指什么?文档里把identifier和number当做token我没有太理解。
2:lex里的yylval.token、yytext,yyleeng这些东西在哪里定义的?
3:yacc规则里的这个例子我还是没有理解,大括号最上方要出现的东西,如果EXPR:NUMBER表示文法EXPR->NUMBER,那其他复杂一些的文法怎么表示呢?

1:token本来就是比较抽象的概念,可以理解为连接lex和yacc的桥梁(接口)。把identifier和number当做token是为了代码更加简洁,可以考虑如果不将其当作token应该如何编写yacc(这样应该就可以体会到把identifier和number当做token的好处)。
2:上述三个东西并不是自己定义的,而是lex和yacc内置的。
image
关于yylval.token的含义其实在我们的文档中也有说明:
image
所以yylval.token指的就是yylval结构体中的token
3:其实文档中给出的例子还是比较复杂的,文档中完整的例子是:
expr -> number | identifier | (expr + expr) | (expr * expr)
image
(你提出的问题很详细,表述很清楚,但如果能尝试自己在文档中找答案或者上网搜索答案,你会有更多的收获,能力会更上一层楼)