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 "])
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]}"])
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]) }"])
def p_statement_to_char(p: yacc.YaccProduction) -> yacc.YaccProduction: """ safe_code_expression : CHAR_LITERAL """ p[0] = ast.StringLiteralNode([p[1]])
def p_expression_to_string_lit(p: yacc.YaccProduction) -> yacc.YaccProduction: """ safe_code_expression : STRING_LITERAL """ p[0] = ast.StringLiteralNode([p[1]])
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 "])