hoaproject / Compiler

The Hoa\Compiler library.
https://hoa-project.net/
453 stars 47 forks source link

Enhance context output of UnexpectedToken exception #112

Open ohader opened 3 years ago

ohader commented 3 years ago

Grammar

%pragma     parser.lookahead    0
%skip       space               \s
%token      int                 \d+
%token      div                 /           -> div
%token      div:int             [1-9]\d*    -> __shift__ * 1
%token      mul                 \*          -> mul
%token      mul:int             \d+         -> __shift__ * 1
#root:
    <int> ( ::mul:: <int> #multiply | ::div:: <int> #divide )*

// this line is superfluous
%token      mul:mul             \*

Source

1**1

Results

Parsing above scenario leads to expected exception, since lexeme * is not allowed in rules. In thrown UnexpectedToken

Hoa\Compiler\Exception\UnexpectedToken: Unexpected token "*" (mul) at line 1 and column 3:
1**1
  ↑ in /Users/olly/Development/Packages/fluid-compiler/vendor/hoa/compiler/Llk/Parser.php on line 1

With adjustments

Hoa\Compiler\Exception\UnexpectedToken: Unexpected token "*" (mul:mul) at line 1 and column 3:
1**1
  ↑ in /Users/olly/Development/Packages/fluid-compiler/vendor/hoa/compiler/Llk/Parser.php on line 1