自上而下的语法分析

简介: 递归下降分析法思想是:让每个非终结符对应一个过程(函数)。根据上述文法,构造递归下降分析程序,程序用类C语言描述。 struct code_val{                                               char code;char val[20]; } t;                                                                 //定义结构变量,存放单词二元式。

递归下降分析法思想是:让每个非终结符对应一个过程(函数)。根据上述文法,构造递归下降分析程序,程序用类C语言描述。

struct code_val{                                              

char code;char val[20];

} t;                                                                 //定义结构变量,存放单词二元式。

ifstream cinf("lex_r.txt",ios::in);                          //从文件lex_r.txt输入数据

void E( )                                                          // ETE'

{

T;E';

}

void E'( )                                                         // E'+TE'|ε

{

if (t.code=='+'){

cinf>>t.code>>t.val;                          //读一个单词的二元式

T;E';

}

}

void T( )                                                         // TFT'

       {

F;T';

       }

void T'( )                                                         // T'*FT'|ε

       {

if (t.code=='*'){                                       //最好写为(t.code in First(T'))

       cinf>>t.code>>t.val;                          //读一个单词的二元式

F;T'

}

       }

void F( )                                                          // F(E) | i | x | y

       {

if (t.code=='('){

cinf>>t.code>>t.val;                          //读一个单词的二元式

E;

if (t.code==')') cinf>>t.code>>t.val;    //读一个单词的二元式

}

else if (t.code=='i'|| t.code=='x'|| t.code=='y')

cinf>>t.code>>t.val;                          //读一个单词的二元式

}

void main( )

{

cinf>>t.code>>t.val;                                  //读一个单词的二元式

E;

}

源程序经词法分析,改造为单词二元式序列形式,存放于文件lex_r.txt中。递归下降分析器从文件lex_r.txt读入数据进行处理。

4.7 预测分析法

㈠预测分析法基本原理

产生式的一般形式为:

A→α1|α2||αn|ε

设当前输入符号为a,根据下述原则

             if (afirst(αi))

                    A→αi推导(1in

             else if (afollow(A))

A→ε推导

else

报错      

构造分析表如下

 

 

 

 



 

+

*

(

)

i

x

x

#

E

 

 

ETE'

 

ETE'

ETE'

ETE'

 

E'

E'+TE'

 

 

E'→ε

 

 

 

E'→ε

T

 

 

TFT'

 

TFT'

TFT'

TFT'

 

T'

T'→ε

T'*FT'

 

T'→ε

 

 

 

T'→ε

F

 

 

F(E)

 

Fi

Fx

Fx

 

以输入串“i + i#”为例,说明工作原理如下:

ETE'FT'E'iT'E'iE'i+TE'i+FT'E'i+iT'E'i+iE'i+i

i          i         i        +   +       i             i            #       #

㈡分析表构造规则

①构造所有候选式的first集,构造所有非终结符的follow集。

②对于文法的每个产生式A→α执行③和④。

③对于每个终结符afirst(α),把A→α加至M[A][a]

④若ε∈first(α),则对于每个终结符bfollow(A),把A→α加至M[A][b]

⑤把所有未定义的M[A][c]标上“出错标志”(cVT)。

㈢预测分析控制程序实现

①数据结构

M              二维数组,存放预测分析表。

stack   符号栈,初始时为"#S"S为开始符号)。

  X        表示栈顶符号

  t.code  当前处理单词种别

②算法描述

预测分析控制程序任何时刻的动作,都按照栈顶符号X和当前输入符号t.code行事,控制程序每次执行下述三种可能的动作之一(暂不考虑出错情况)。

l         X t.code 均为 '#',则分析成功,输入串为合法句子,终止分析过程。

l         X是终结符,并且Xt.code相等,表示期望的终结符号和输入符号相等。让Xstack栈,并输入下一个单词二元式。

l         X是非终结符,则查预测分析表。若M[X][t.code]存放着一条关于X的一个产生式,那么,让Xstack栈,然后把产生式右部符号串按反序一一推进stack栈。若右部符号串为空字ε,则意味着无任何文法符号进栈。

㈣预测分析法讨论

①预测分析法是由分析表和控制程序构成的,控制程序与文法无关,分析表随文法而异。

②在预测分析表中,若某一单元持有一个以上产生式,则称该预测分析表含多重定义,多重定义使得控制程序无法工作。

③一个文法,若它的预测分析表不含多重定义,则称该文法是LL(1)文法、分析表为LL(1)分析表。

④一个文法是LL(1)的,对于文法的每一个非终结符的任何两个不同候选式(A→α|β),下述条件成立:

l         first(α)first(β)={}

l         若βε,则first(α)follow(A)={}

⑤二义文法不是LL(1)文法

 

 

 

本文摘自《编译原理实用教程》(清华大学)

相关文章
|
1天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
3471 14
|
8天前
|
存储 人工智能 负载均衡
阿里云OpenClaw多Agent实战宝典:从极速部署到AI团队搭建,一个人=一支高效军团
在AI自动化时代,单一Agent的“全能模式”早已无法满足复杂任务需求——记忆臃肿导致响应迟缓、上下文污染引发逻辑冲突、无关信息加载造成Token浪费,这些痛点让OpenClaw的潜力大打折扣。而多Agent架构的出现,彻底改变了这一现状:通过“单Gateway+多分身”模式,让一个Bot在不同场景下切换独立“大脑”,如同组建一支分工明确的AI团队,实现创意、写作、编码、数据分析等任务的高效协同。
3185 27
|
13天前
|
人工智能 自然语言处理 监控
OpenClaw skills重构量化交易逻辑:部署+AI全自动炒股指南(2026终极版)
2026年,AI Agent领域最震撼的突破来自OpenClaw(原Clawdbot)——这个能自主规划、执行任务的智能体,用50美元启动资金创造了48小时滚雪球至2980美元的奇迹,收益率高达5860%。其核心逻辑堪称教科书级:每10分钟扫描Polymarket近千个预测市场,借助Claude API深度推理,交叉验证NOAA天气数据、体育伤病报告、加密货币链上情绪等多维度信息,捕捉8%以上的定价偏差,再通过凯利准则将单仓位严格控制在总资金6%以内,实现低风险高频套利。
6795 61
|
2天前
|
人工智能 JSON JavaScript
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
手把手教你用 OpenClaw(v2026.2.22-2)+ 飞书,10分钟零代码搭建专属AI机器人!内置飞书插件,无需额外安装;支持Claude等主流模型,命令行一键配置。告别复杂开发,像聊同事一样自然对话。
1188 5
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
|
2天前
|
人工智能 网络安全 数据安全/隐私保护
Docker部署OpenClaw(Clawdbot)攻略+阿里云部署OpenClaw 2026版教程
OpenClaw(前身为Clawdbot、Moltbot)作为一款高性能的AI代理平台,凭借自然语言驱动的任务自动化、多平台无缝协作、轻量化容器化架构等核心优势,成为2026年办公自动化、智能协作、跨端指令执行的主流工具,可实现邮件处理、日程管理、航班值机、多IM平台消息联动等丰富功能,无需复杂开发即可快速搭建专属AI助手。Docker作为轻量级容器化技术,能完美解决OpenClaw部署过程中的环境冲突、依赖配置、跨平台兼容等问题,实现一键搭建、快速启动、灵活迁移的部署体验。
986 2
|
30天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
45136 158
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
3天前
|
存储 人工智能 BI
2026年OpenClaw(Clawdbot)极简部署:接入小红书全自动运营,一个人=一支团队
2026年的小红书运营赛道,AI自动化工具已成为核心竞争力。OpenClaw(原Clawdbot)凭借“Skill插件化集成、全流程自动化、跨平台联动”的核心优势,彻底颠覆传统运营模式——从热点追踪、文案创作、封面设计到自动发布、账号互动,仅需一句自然语言指令,即可实现全链路闭环。而阿里云作为OpenClaw官方推荐的云端部署载体,2026年推出专属秒级部署方案,预装全套运行环境与小红书运营插件,让零基础用户也能10分钟完成部署,轻松拥有7×24小时在线的“专属运营团队”。
1072 4
|
7天前
|
人工智能 自然语言处理 安全
2026年OpenClaw Skills安装指南:Top20必装清单+阿里云上部署实操(附代码命令)
OpenClaw(原Clawdbot)的强大之处,不仅在于其开源免费的AI执行引擎核心,更在于其庞大的Skills生态——截至2026年2月,官方技能市场ClawHub已收录1700+各类技能插件,覆盖办公自动化、智能交互、生活服务等全场景。但对新手而言,面对海量技能往往无从下手,盲目安装不仅导致功能冗余,还可能引发权限冲突与安全风险。
1675 9

热门文章

最新文章