python2ruby/src/parser.y
2025-11-25 16:48:33 +01:00

51 lines
No EOL
996 B
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
%token KW_DEF KW_IF KW_RETURN KW_FOR KW_IN
%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";
}
}