added code to process the binop symbol
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
a3e2b589be
commit
ec4a6facee
@ -860,6 +860,7 @@ enum hcl_flx_state_t
|
|||||||
HCL_FLX_DOLLARED_IDENT,
|
HCL_FLX_DOLLARED_IDENT,
|
||||||
HCL_FLX_HMARKED_TOKEN, /* hash-marked token */
|
HCL_FLX_HMARKED_TOKEN, /* hash-marked token */
|
||||||
HCL_FLX_HMARKED_B, /* #b - intermediate state before #b[ or #b-radixed binary number */
|
HCL_FLX_HMARKED_B, /* #b - intermediate state before #b[ or #b-radixed binary number */
|
||||||
|
HCL_FLX_HMARKED_BINOP, /* #++ - binary operator symbol */
|
||||||
HCL_FLX_HMARKED_CHAR, /* hash-marked character that begins with #\ */
|
HCL_FLX_HMARKED_CHAR, /* hash-marked character that begins with #\ */
|
||||||
HCL_FLX_HMARKED_IDENT, /* hash-marked identifier like #include, etc */
|
HCL_FLX_HMARKED_IDENT, /* hash-marked identifier like #include, etc */
|
||||||
HCL_FLX_HMARKED_NUMBER, /* hash-marked number - radixed number like #xABCD */
|
HCL_FLX_HMARKED_NUMBER, /* hash-marked number - radixed number like #xABCD */
|
||||||
|
37
lib/read.c
37
lib/read.c
@ -272,6 +272,7 @@ static HCL_INLINE int is_delimchar (hcl_ooci_t c)
|
|||||||
c == '#' || c == '\"' || c == '\'' || c == '\\' || is_spacechar(c) || c == HCL_OOCI_EOF;
|
c == '#' || c == '\"' || c == '\'' || c == '\\' || is_spacechar(c) || c == HCL_OOCI_EOF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int hcl_is_binop_char (hcl_ooci_t c)
|
int hcl_is_binop_char (hcl_ooci_t c)
|
||||||
{
|
{
|
||||||
return c == '&' || c == '*' || c == '+' || c == '-' || c == '/' || c == '%' ||
|
return c == '&' || c == '*' || c == '+' || c == '-' || c == '/' || c == '%' ||
|
||||||
@ -2458,6 +2459,13 @@ static int flx_hmarked_token (hcl_t* hcl, hcl_ooci_t c)
|
|||||||
* #"..." symbol literal
|
* #"..." symbol literal
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (hcl_is_binop_char(c))
|
||||||
|
{
|
||||||
|
reset_flx_token (hcl);
|
||||||
|
FEED_CONTINUE_WITH_CHAR (hcl, c, HCL_FLX_HMARKED_BINOP);
|
||||||
|
goto consumed;
|
||||||
|
}
|
||||||
|
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
case '#':
|
case '#':
|
||||||
@ -2707,6 +2715,34 @@ not_consumed:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int flx_hmarked_binop (hcl_t* hcl, hcl_ooci_t c)
|
||||||
|
{
|
||||||
|
if (hcl_is_binop_char(c))
|
||||||
|
{
|
||||||
|
ADD_TOKEN_CHAR(hcl, c);
|
||||||
|
goto consumed;
|
||||||
|
}
|
||||||
|
else if (is_delimchar(c))
|
||||||
|
{
|
||||||
|
FEED_WRAP_UP(hcl, HCL_TOK_SYMLIT);
|
||||||
|
goto not_consumed;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hcl_setsynerrbfmt (hcl, HCL_SYNERR_SYMLIT,
|
||||||
|
TOKEN_LOC(hcl), HCL_NULL /* no token name as incomplete */,
|
||||||
|
"invalid binary selector character '%jc' after #%.*js",
|
||||||
|
c, TOKEN_NAME_LEN(hcl), TOKEN_NAME_PTR(hcl));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
consumed:
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
not_consumed:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int flx_hmarked_number (hcl_t* hcl, hcl_ooci_t c)
|
static int flx_hmarked_number (hcl_t* hcl, hcl_ooci_t c)
|
||||||
{
|
{
|
||||||
hcl_flx_hn_t* rn = FLX_HN(hcl);
|
hcl_flx_hn_t* rn = FLX_HN(hcl);
|
||||||
@ -3230,6 +3266,7 @@ static int feed_char (hcl_t* hcl, hcl_ooci_t c)
|
|||||||
case HCL_FLX_DOLLARED_IDENT: return flx_dollared_ident(hcl, c);
|
case HCL_FLX_DOLLARED_IDENT: return flx_dollared_ident(hcl, c);
|
||||||
case HCL_FLX_HMARKED_TOKEN: return flx_hmarked_token(hcl, c);
|
case HCL_FLX_HMARKED_TOKEN: return flx_hmarked_token(hcl, c);
|
||||||
case HCL_FLX_HMARKED_B: return flx_hmarked_b(hcl, c);
|
case HCL_FLX_HMARKED_B: return flx_hmarked_b(hcl, c);
|
||||||
|
case HCL_FLX_HMARKED_BINOP: return flx_hmarked_binop(hcl, c);
|
||||||
case HCL_FLX_HMARKED_CHAR: return flx_hmarked_char(hcl, c);
|
case HCL_FLX_HMARKED_CHAR: return flx_hmarked_char(hcl, c);
|
||||||
case HCL_FLX_HMARKED_IDENT: return flx_hmarked_ident(hcl, c);
|
case HCL_FLX_HMARKED_IDENT: return flx_hmarked_ident(hcl, c);
|
||||||
case HCL_FLX_HMARKED_NUMBER: return flx_hmarked_number(hcl, c);
|
case HCL_FLX_HMARKED_NUMBER: return flx_hmarked_number(hcl, c);
|
||||||
|
@ -83,3 +83,7 @@ defun :* fun1() { ##ERROR: syntax error - function name not symbol in defun
|
|||||||
---
|
---
|
||||||
|
|
||||||
(10 + 20 30) ##ERROR: syntax error - too many operands
|
(10 + 20 30) ##ERROR: syntax error - too many operands
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#**a ##ERROR: syntax error - invalid binary selector character 'a' after #**
|
||||||
|
Loading…
Reference in New Issue
Block a user