微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正式语言和编译器 30 问题

如何解决正式语言和编译器 30 问题

让 G 是字母表 {a,b} 上的正则表达式的以下语法,带有替代运算符(+ 运算符)、连接(通过正则表达式并列呈现)、克林星(* 运算符)和括号:

R -> R + R | RR | R* | (R) | |

  1. 为 L(G) 的产生提供 LALR(1) 文法 G',它按照操作符的优先级和二元操作符的结合性的通常约定来解决 G 的歧义:替代和串联是左-联想; Kleene 星具有最高优先级(意味着它优先于串联和替代);串联优先于替代。

  2. 显示使用 G' 获得的 a+ba* 的推导树。

  3. 设计一个基于 G' 的 S 属性 SSD,以便在正则表达式 r 分析阶段生成用于识别 L(G) 的有限状态自动机。

我通过创建以下明确的语法解决了 1.:

R -> R + S | S
S -> ST | T 
T -> T* | U
U -> (R) | a | b

然后用这个语法我画了 a+b*a 的派生树。

问题在于第 3 题。

如果有人能帮助我,我将不胜感激!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。