diff --git a/parse.leg b/parse.leg index a2bfceb..5669166 100644 --- a/parse.leg +++ b/parse.leg @@ -765,7 +765,7 @@ argumentList = LPAREN m:makeMap RPAREN { $$ = m } value = n:FLOAT { $$ = newFloat(n) } - | n:INTEGER { $$ = newInteger(n) } + | n:integer { $$ = newInteger(n) } | s:string { $$ = newString(s) } | s:symbol { $$ = s } | m:map { $$ = newMap(m) } @@ -798,7 +798,7 @@ map = LCB m:makeMap makeMap = { $$ = makeMap() } -key = IDENT | INTEGER +key = IDENT | integer - = (blank | comment)* @@ -816,6 +816,9 @@ keyword = FUN | SYNTAX | VAR | SWITCH | CASE | DEFAULT | DO | FOR | IN | WHILE | IDENT = !keyword < [a-zA-Z_][a-zA-Z0-9_]* > - { $$ = intern(yytext) } +integer = i:INTEGER { $$ = i } + | '-' i:integer { $$ = makeInteger(-getInteger(i)) } + INTEGER = '0b' < [01]+ > - { $$ = makeInteger(strtol(yytext, 0, 2)) } | '0x' < [0-9a-fA-F]+ > - { $$ = makeInteger(strtol(yytext, 0, 16)) } | '0' < [0-7]+ > - { $$ = makeInteger(strtol(yytext, 0, 8)) }