51 lines
No EOL
1.2 KiB
Text
51 lines
No EOL
1.2 KiB
Text
%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 <string>
|
|
class Scanner;
|
|
}
|
|
|
|
%code {
|
|
#include <iostream>
|
|
#include "scanner.hpp"
|
|
|
|
#undef yylex
|
|
#define yylex scanner->lex
|
|
}
|
|
|
|
%parse-param { Scanner* scanner }
|
|
|
|
%token <std::string> IDENTIFIER
|
|
%token <std::string> STRING
|
|
%token <int> 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";
|
|
}
|
|
} |