提交 ed8514b1 创建 作者: 宋海霞's avatar 宋海霞

modify main.c

上级 d47f2fbb
...@@ -85,6 +85,36 @@ void RemoveLeftRecursion(Rule* pHead) ...@@ -85,6 +85,36 @@ void RemoveLeftRecursion(Rule* pHead)
RuleSymbol* pSelect; // Select 游标 RuleSymbol* pSelect; // Select 游标
Rule* pNewRule; // Rule 指针 Rule* pNewRule; // Rule 指针
pNewRule = CreateRule(pHead->RuleName); // 创建新 Rule
strcat(pNewRule->RuleName, Postfix);
pSelect = pHead->pFirstSymbol; // 初始化 Select 游标
RuleSymbol **pSelectPrePtr = &pHead->pFirstSymbol;
while(pSelect != NULL) // 循环处理所有的 Select
{
if(0 == pSelect->isToken && pSelect->pRule == pHead)// Select 存在左递归
{
// 移除包含左递归的 Select,将其转换为右递归后添加到新 Rule 的末尾,并移动游标
//
// TODO: 在此添加代码
//
}
else // Select 不存在左递归
{
// 在没有左递归的 Select 末尾添加指向新 Rule 的非终结符,并移动游标
//
// TODO: 在此添加代码
//
}
}
// 在新 Rule 的最后加入ε(用 '$' 代替)
// 将新 Rule 插入文法链表
// //
// TODO: 在此添加代码 // TODO: 在此添加代码
// //
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论