lemon简介

        lemon需要两个c文件:lemon.c和lempar.c。lemon.c可以编译生成可执行程序lemon,而lempar.c是lemon根据语法规则文件生成代码的模板。

终结符和非终结符

  • 终结符(token):以字母、数字、下划线组成,并且以大写字母开头的字符串。一般全写为大写。
  • 非终结符:以字母、数字、下划线组成,并且以小写字母开头的字符串。一般全写为小写。

冲突的解决:

移进-规约冲突:按移进解决

  • 如果移进和规约缺乏优先次序信息,那么移进优先,并且报告解析冲突
  • 如果移进的优先次序比规约的优先次序高,那么移进优先,并且不报告解析冲突
  • 如果规约的优先次序比移进的优先次序高,那么规约优先,并且不报告解析冲突
  • 如果移进的优先次序与右关联的优先次序相同,那么移进优先,并且不报告解析冲突
  • 如果移进的优先次序与左关联的优先次序相同,那么规约优先,并且不报告解析冲突
  • 其它情况,以移进优先,并且报告解析冲突

规约-规约冲突:按优先级高的解决

  • 如果两个规约缺乏优先次序信息,那么以先出现在语法文件里的规则优先,并且报告解析冲突
  • 如果存在两个两个规约都满足,那么以优先级高的规约解决争议,并且不报告解析冲突
  • 其它情况,以先出现在语法文件的规则进行规约,并且报告解析冲突

指示符

  • %destructor
  • %extra_argument
  • %include
  • %left
  • %name
  • %nonassoc
  • %parse_accept
  • %parse_failure
  • %right
  • %stack_overflow
  • %stack_size
  • %start_symbol
  • %syntax_error
  • %token_destructor
  • %token_prefix
  • %token_type
  • %type

 

分析器接口

  • void *ParseAlloc(void *(*pAllocFunc)(size_t));
  • void Parse(void *pParser, int hTokenID, PARSETOKENTYPE sTokenData, ParseARG_PDECL pArg);
  • ParseTrace(FILE *stream, char *zPrefix);
  • ParseFree(void *pParser, void (*pFreeFunc)(void *));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值