当前位置: 代码迷 >> 综合 >> LEMON概述
  详细解决方案

LEMON概述

热度:4   发布时间:2024-01-21 01:00:34.0

一.编译原理一些常识

1.词法分析将字符串按正则表达式,分成一个个匹配的token,予之表明它们身份的标记,以及长度和在语法文件中的位置。


2.单个的token没有意义,需要语法分析程序识别token的出现和它们排列的规则,按结构执行相应操作。

3.编译原理的研究

<1>.自然语言结构的研究。1957年NoamChomsky建立形式语言的描述后,人们将语言分类为0型-非限制的,1型-上下文有关的,2型-上下文无关,3型-正则的,后一种均为前一种的特例,且2型文法被证明是程序语言设计中最适用的。

<2>.正则表达式研究。正则表达式与3型文法直接对应并最终引出了token的符号方式。

<3>.自动机的研究。有穷自动机与下推自动机

<4>.计算机程序语言的发展又给予编译原理实验的场所。

4.语法分析的两种方案:自顶向下和自底向上分析法,后者有一种综合交通最好的分析技术LALR(1)分析法

二.语法分析生成器程序lemon

编译器的编译器,即生成语法分析器的编译器

1.语法分析生成器程序一次一次地输入一个个单词,寻求这些单词之间的关系

2.lemon的工作流程:


3.运行lemon(lemonxxx.y),生成一个能够进行语法分析的C源文件,一个定义终结符整数代号的头文件和一个包含语法分析所有状态的自动机信息报告文件.

4.lemon处理.y文件后,仅仅生成可供其他函数调用的一些子函数,这些子函数在语法分析器源码中。调用这些子函数,可以实现语法分析的功能


<1>.调用这些函数前,先要在应用程序创建一个分析器‘实体’:

void*pParser = ParseAlloc( malloc);


void*ParseAlloc(void *(*mallocProc)(size_t)){

yyParser*pParser;

pParser= (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );

...

returnpParser;

}

ParseAlloc的参数是一个函数指针,该指针指向的函数用于给yyParser*pParser分配内存,我们可用C标准函数malloc(),也可用自己编写的分配内存的函数。

完成语法分析后,要记得删除pParser:ParseFree(pParser,free);

free就是C标准函数free(),也可用程序员自己的内存释放函数。

<2>.运行分析器前,先要向它提供三个输入:

记号的

  相关解决方案