首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >制作语法LL

制作语法LL
EN

Stack Overflow用户
提问于 2014-03-11 08:55:19
回答 1查看 71关注 0票数 3

我已经花了两个多的时间来转换它,但我总是得到通用的前缀ID。

有人能给我解释一下吗?因为我正在尝试做一个非常大的语法,并需要我的基础清楚。

A、B、C、D是唯一的非终端。

代码语言:javascript
复制
A : ‘(‘ B ‘)’ 
 | ID ASSIGN C 
 | C 

C : C '+' D 
 | C '-' D 
 | D 

D : ID 
 | ID '(' actuals ')' 
 | ID '(' ')' 
 | INT_LIT 
 | ‘(‘ C ‘)’ 


B : B ';' A | A
EN

回答 1

Stack Overflow用户

发布于 2014-03-11 09:03:43

在LL中,一个产品不能有多个以同一个终端开始的选项,所以如果你愿意的话,你可以把这些公共部分放到一个共享头中。所以

代码语言:javascript
复制
D : ID 
 | ID '(' actuals ')' 
 | ID '(' ')' 
 | INT_LIT 
 | ‘(‘ C ‘)’ 

变成了类似于

代码语言:javascript
复制
D : D_things_that_start_with_ID
 | D_things_that_do_not_start_with_ID

哪里

代码语言:javascript
复制
D_things_that_start_with_ID :
  ID D_things_that_follow_ID

D_things_that_follow_ID :
  epsilon
  | '(' actuals ')' 
  | '(' ')' 

D_things_that_do_not_start_with_ID :
 INT_LIT 
 | ‘(‘ C ‘)’ 

对于其他常见导联符号,依此类推。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22314394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档