Lemon
文章平均质量分 91
麦码兜
这个作者很懒,什么都没留下…
展开
-
lemon简介
lemon需要两个c文件:lemon.c和lempar.c。lemon.c可以编译生成可执行程序lemon,而lempar.c是lemon根据语法规则文件生成代码的模板。 终结符和非终结符 终结符(token):以字母、数字、下划线组成,并且以大写字母开头的字符串。一般全写为大写。 非终结符:以字母、数字、下划线组成,并且以小写字母开头的字符串。一般全写为小写。原创 2011-06-11 10:38:00 · 1264 阅读 · 0 评论 -
lemon之Hello World
参考文献: http://souptonuts.sourceforge.net/readme_lemon_tutorial.html像所有的入门教程一样,咱也写一个Hello World程序。准备工作:先编译生成lemon,并把lempar.c源代码放在当前工作目录下。第一个例子:1、编写语法文件:example.y%token_type {int} %left PLUS原创 2011-06-11 11:22:00 · 771 阅读 · 0 评论 -
lemon之Hello World(续4)
现在,咱再加上对括号的支持。 在lemon的语法文件里加上括号的语法规则,在lex的词法规则里加上左右括号的定义。example.yexpr(A) ::= LP expr(B) RP. { /* () */ A.value = B.value; A.n = B.n + 1; } lexer.l原创 2011-06-22 16:40:00 · 735 阅读 · 0 评论 -
lemon之Hello World(续1)
再将进入例子之前,咱们先来认识一些lemon的指示符。 %token_type 该指示符用来指示终结符的数据结构类型,所有的终结符都必须具有相同的类型,也就是Parse()(见lemon简介)的第三个参数。 %type 该指示符用来指示非终结符的数据结构类型。非终结符的数据结构类型不必都相同。 在《lemon之Hello World》中的语原创 2011-06-22 09:59:00 · 645 阅读 · 0 评论 -
lemon之Hello World(续2)
认识一下lemon的析构。lemon有两个指示符用户析构,分别是%destructor和%token_destructor。%destructor 用于非终结符的析构%token_destructor 用于终结符的析构原创 2011-06-22 10:55:00 · 493 阅读 · 0 评论 -
lemon之Hello World(续3)
之前几篇短文的主函数都是写死了代码,没有用户交互过程。现在,咱们利用flex和lemon结合,制作一个简单的计算器。之所以说简单,是因为只含有+-*/四个运算,并且还不支持括号。 相关文件如下:1、数据结构exampleDef.h#ifndef __EXAMPLE_DEF_H__ #define __EXAMPLE_DEF_H__ //le原创 2011-06-22 14:33:00 · 924 阅读 · 0 评论