}
struct logical_or_expression *parse_logical_or_expression(void)
+{
+ struct logical_or_expression *expr;
+ int pos;
+
+ expr = logical_or_expression_new();
+
+ if(!expr) {
+ return(NULL);
+ }
+
+ pos = lex_getpos();
+
+ /* attempt to parse `logical-OR-expression ||' prefix */
+
+ expr->lorexpr = parse_logical_or_expression();
+ expr->op = lex_gettoken();
+
+ if(!expr->lorexpr || !expr->op || expr->op->type != TOKEN_LOR) {
+ /* doesn't look like a prefix... */
+
+ lex_setpos(pos);
+
+ if(expr->lorexpr) {
+ free(expr->lorexpr);
+ expr->lorexpr = NULL;
+ }
+ expr->op = NULL;
+ }
+
+ if(!(expr->landexpr = parse_logical_and_expression())) {
+ if(expr->lorexpr) {
+ free(expr->lorexpr);
+ expr->lorexpr = NULL;
+ }
+
+ free(expr);
+ expr = NULL;
+ }
+
+ return(expr);
+}
+
+struct logical_and_expression *parse_logical_and_expression(void)
{
return(NULL);
}
--- /dev/null
+#ifndef PARSER_H
+#define PARSER_H
+
+#include "grammar.h"
+
+struct integer_constant *parse_integer_constant(void);
+struct character_constant *parse_character_constant(void);
+struct floating_constant *parse_floating_constant(void);
+struct enumeration_constant *parse_enumeration_constant(void);
+struct constant *parse_constant(void);
+struct string *parse_string(void);
+struct type_name *parse_type_name(void);
+
+struct logical_or_expression *parse_logical_or_expression(void);
+struct logical_and_expression *parse_logical_and_expression(void);
+
+struct unary_expression *parse_unary_expression(void);
+struct conditional_expression *parse_conditional_expression(void);
+struct identifier *parse_identifier(void);
+struct expression *parse_expression(void);
+struct primary_expression *parse_primary_expression(void);
+struct type_qualifier *parse_type_qualifier(void);
+struct storage_class_specifier *parse_storage_class_specifier(void);
+struct struct_specifier *parse_struct_specifier(void); /* TODO */
+struct union_specifier *parse_union_specifier(void); /* TODO */
+struct enum_specifier *parse_enum_specifier(void); /* TODO */
+struct typedef_name *parse_typedef_name(void); /* TODO */
+struct type_specifier *parse_type_specifier(void);
+struct declaration_list *parse_declaration_list(void);
+struct declaration_specifiers *parse_declaration_specifiers(void);
+struct function_definition *parse_function_definition(void);
+struct compound_statement *parse_compound_statement(void);
+struct declarator *parse_declarator(void);
+struct declaration *parse_declaration(void);
+struct external_declaration *parse_external_declaration(void);
+struct translation_unit *parse_translation_unit(struct translation_unit*);
+
+#endif /* PARSER_H */