Skip to content

Instantly share code, notes, and snippets.

@jedp
Created May 13, 2011 06:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jedp/970091 to your computer and use it in GitHub Desktop.
Save jedp/970091 to your computer and use it in GitHub Desktop.
steve.jison
/* Part of the grammar of Steve */
%lex
%%
\s+ { /* ignore whitespace */ }
[0-9]+"."[0-9]+\b { return 'FLOAT'; }
[0-9]+\b { return 'INT'; }
\"[^\"]+\" { yytext = yytext.substr(1, yyleng-2); return 'STR'; }
"int" return 'INTTYPE'
"float" return 'FLOATTYPE'
"string" return 'STRTYPE'
"=>" return 'RETURNS'
"[" return '['
"]" return ']'
"{" return '{'
"}" return '}'
"," return ','
<<EOF>> return 'EOF'
. return 'INVALID'
/lex
%left UMINUS
%start grammar
%%
grammar
: type_decl RETURNS expr EOF { console.log($expr); return $expr }
| EOF { return null }
;
type
: INTTYPE
| FLOATTYPE
| STRTYPE
;
type_decl
: type '[' ']'
| type
;
number
: '-' number %prec UMINUS { $$ = -$2; }
| INT { $$ = Number(yytext); }
| FLOAT { $$ = Number(yytext); }
;
primitive
: number { $$ = $1 }
| STR { $$ = $1 }
;
primitives
: primitives ',' primitive { $$ = $primitives; $$.push($primitive); }
| primitive { $$ = [$primitive] }
;
list
: type_decl '{' primitives '}' { $$ = $primitives; }
;
expr
: list { $$ = $list; }
| primitive { $$ = $primitive; }
;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment