%skeleton "lalr1.cc" %require "3.0" %defines %define api.value.type variant %define api.token.raw %define api.parser.class { parser } %define api.namespace { yy } %define api.token.prefix {TOK_} %define parse.trace %code requires { #include class Scanner; } %code { #include #include "scanner.hpp" #undef yylex #define yylex scanner->lex } %parse-param { Scanner* scanner } %token IDENTIFIER %token STRING %token NUMBER %token ASSIGN PLUS MINUS L_PAREN R_PAREN COLON EQ NE LT GT LTE GTE MULTIPLY DIVIDE MODULO L_BRACKET L_BRACE R_BRACKET R_BRACE DOT SEMICOLON COMMA BIT_NOT BIT_AND BIT_OR BIT_XOR LSHIFT RSHIFT PLUS_ASSIGN MINUS_ASSIGN MULTIPLY_ASSIGN DIVIDE_ASSIGN MODULO_ASSIGN BIT_AND_ASSIGN BIT_OR_ASSIGN BIT_XOR_ASSIGN LSHIFT_ASSIGN RSHIFT_ASSIGN %token KW_DEF KW_IF KW_RETURN KW_FOR KW_IN KW_NOT KW_AND KW_OR KW_PASS KW_ELSE KW_ELIF KW_CLASS %token EOF NEWLINE INDENT DEDENT %% input: /* empty */ | input element ; element: IDENTIFIER { std::cout << "IDENTIFIER: " << $1 << "\n"; } ; %% namespace yy { void parser::error(const std::string& msg) { std::cerr << "Error: " << msg << "\n"; } }