编译原理3

2017-08-11  本文已影响0人  丁狗子

递归下降文法,LL文法,优势在于文法实现相对LR文法简单,缺点在于不接受左递归文法,语义实现基于L属性集,实现难度较大

LR文法,能够接受左递归(对输入文法要求低),语义实现基于S属性集,归约时可以进行语法制导翻译,实现直观简洁,缺点在于LR文法需要预先构建LR自动机,算法较为复杂

LR自动机,项集,闭包,GOTO函数

LR归约时需要堆栈结合自动机状态进行

堆栈归约例子

N → a ( N, N )

N → ε

###############堆栈###########
def parse_tree():

stack = []
grammar = 0

for i in range(len(stmt)):
    if stmt[i]=='(':
        grammar=1
        pass
    elif stmt[i]==')':
        grammar=0
        node=stack.pop(0)
        pass
    elif stmt[i]==',':
        grammar=2
        pass
    else:
        _node=Node()
        _node.value=expression[i]

        if(grammar==1):
            stack[0].left=_node
        elif(grammar==2):
            stack[0].right=_node

        stack.insert(0, _node)

return node
上一篇下一篇

猜你喜欢

热点阅读