Beispiel #1
0
def p_else_expression(p: yacc.YaccProduction) -> yacc.YaccProduction:
    """
    else_expression : PREPROCESSING_KEYWORD_ELSE
    """
    symtable.IF_STACK[-1] = (symtable.IF_STACK[-1][0],
                             not symtable.IF_STACK[-1][1])
    p[0] = ast.StringLiteralNode([f"// else expression "])
Beispiel #2
0
def p_ifndef_expression(p: yacc.YaccProduction) -> yacc.YaccProduction:
    """
    ifndef_expression : PREPROCESSING_KEYWORD_IFNDEF WHITESPACE IDENTIFIER
    """
    symtable.IF_STACK.append((p[3], p[3] not in symtable.TABLE))

    p[0] = ast.StringLiteralNode([f"// ifndef expression {p[3]}"])
Beispiel #3
0
def p_if_expression(p: yacc.YaccProduction) -> yacc.YaccProduction:
    """
    if_expression : PREPROCESSING_KEYWORD_IF WHITESPACE valid_expr
    """
    symtable.IF_COUNT += 1

    symtable.IF_STACK.append((str(symtable.IF_COUNT), p[3]))
    p[0] = ast.StringLiteralNode([f"// if expression result: { int(p[3]) }"])
Beispiel #4
0
def p_statement_to_char(p: yacc.YaccProduction) -> yacc.YaccProduction:
    """
    safe_code_expression : CHAR_LITERAL
    """
    p[0] = ast.StringLiteralNode([p[1]])
Beispiel #5
0
def p_expression_to_string_lit(p: yacc.YaccProduction) -> yacc.YaccProduction:
    """
    safe_code_expression : STRING_LITERAL
    """
    p[0] = ast.StringLiteralNode([p[1]])
Beispiel #6
0
def p_endif_expression(p: yacc.YaccProduction) -> yacc.YaccProduction:
    """
    endif_expression : PREPROCESSING_KEYWORD_ENDIF
    """
    symtable.IF_STACK.pop()
    p[0] = ast.StringLiteralNode([f"// endif expression "])