コード例 #1
0
ファイル: parser.py プロジェクト: abaksy/golang-mini-compiler
def p_ExprSwitchCase(p):
    '''ExprSwitchCase : CASE ExpressionList
                 | DEFAULT
                 | CASE Expression
    '''
    p[0] = TreeNode('ExprSwitchCase', 0, 'INT')
    if len(p) == 3:
        p[0].data = p[2].data
        p[0].TAC = p[2].TAC

    parsed.append(p.slice)
コード例 #2
0
ファイル: parser.py プロジェクト: abaksy/golang-mini-compiler
def p_ExprCaseClause(p):
    '''ExprCaseClause : ExprSwitchCase COLON StatementList
    '''
    l1 = labelGen()
    p[0] = TreeNode('ExprCaseClause', 0, 'INT')
    # p[0].TAC.append_TAC(p[1].TAC)
    p[0].TAC.add_line([l1])
    # p[0].TAC.add_line(['ifgotoneq', p[1].children, p[1].children, l1])
    p[0].TAC.append_TAC(p[3].TAC)
    p[0].children = [[p[1].data, l1]]
    p[0].data = p[1].TAC
    return
コード例 #3
0
ファイル: parser.py プロジェクト: harkiratbehl/PyGM
def p_ExprCaseClause(p):
    '''ExprCaseClause : ExprSwitchCase COLON StatementList
    '''
    parsed.append(p.slice)
    l1 = gen('label')
    p[0] = TreeNode('ExprCaseClause', 0, 'INT')
    # p[0].TAC.append_TAC(p[1].TAC)
    p[0].TAC.add_line(['label', l1, '', ''])
    # p[0].TAC.add_line(['ifgotoneq', p[1].children, p[1].children, l1])
    p[0].TAC.append_TAC(p[3].TAC)
    p[0].children = [[p[1].data, l1]]
    p[0].data = p[1].TAC

    return
コード例 #4
0
ファイル: parser.py プロジェクト: harkiratbehl/PyGM
def p_Arguments(p):
    '''Arguments : LROUND RROUND
                 | LROUND ExpressionList RROUND
                 | LROUND Expression RROUND
                 | LROUND Type RROUND
                 | LROUND Type COMMA ExpressionList RROUND
                 | LROUND Type COMMA Expression RROUND
    '''
    # print p.slice
    parsed.append(p.slice)
    if len(p) == 3:
        p[0] = TreeNode('Arguments', 0, 'None')
    if len(p) == 4:
        if p[2].name == 'Expression':
            p[0] = TreeNode('Arguments', 1, 'None', 0, [p[2]], p[2].TAC)
        if p[2].name == 'ExpressionList':
            p[0] = p[2]
            p[0].name = 'Arguments'
            p[0].data = len(p[2].children)
    return