Skip to content

Commit

Permalink
add optional parameters/arguments for math commands
Browse files Browse the repository at this point in the history
  • Loading branch information
gfngfn committed Sep 8, 2018
1 parent cd57b5f commit e02bb58
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 6 deletions.
3 changes: 3 additions & 0 deletions src/frontend/lexer.mll
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,9 @@ and mathexpr stack = parse
comment lexbuf;
mathexpr stack lexbuf
}
| "?:" {
OPTIONAL(get_pos lexbuf)
}
| "!{" {
Stack.push HorizontalState stack;
skip_spaces lexbuf;
Expand Down
33 changes: 27 additions & 6 deletions src/frontend/parser.mly
Original file line number Diff line number Diff line change
Expand Up @@ -623,10 +623,10 @@ nxvertdec:
}
;
nxmathdec:
| mcmdtok=HORZCMD; argpatlst=argpats; DEFEQ; utast=nxlet {
| mcmdtok=HORZCMD; cmdarglst=list(arg); DEFEQ; utast=nxlet {
let (rngcs, _) = mcmdtok in
let rng = make_range (Tok rngcs) (Ranged utast) in
let curried = curry_lambda_abstract_pattern rngcs argpatlst utast in
let curried = curry_lambda_abstract Alist.empty rngcs cmdarglst utast in
(None, mcmdtok, (rng, UTLambdaMath(curried)))
}
;
Expand Down Expand Up @@ -1130,10 +1130,31 @@ mathbot:
| tok=VARINMATH { let (rng, mdlnmlst, varnm) = tok in (rng, UTMEmbed((rng, UTContentOf(mdlnmlst, varnm)))) }
;
matharg:
| opn=BMATHGRP; utast=mathblock; cls=EMATHGRP { let (_, utastmain) = utast in UTMandatoryArgument(make_standard (Tok opn) (Tok cls) utastmain) }
| opn=BHORZGRP; utast=sxsep; cls=EHORZGRP { let (_, utastmain) = utast in UTMandatoryArgument(make_standard (Tok opn) (Tok cls) utastmain) }
| opn=BVERTGRP; utast=vxblock; cls=EVERTGRP { let (_, utastmain) = utast in UTMandatoryArgument(make_standard (Tok opn) (Tok cls) utastmain) }
| utcmdarg=narg { utcmdarg }
| opn=BMATHGRP; utast=mathblock; cls=EMATHGRP {
let (_, utastmain) = utast in
UTMandatoryArgument(make_standard (Tok opn) (Tok cls) utastmain)
}
| opn=BHORZGRP; utast=sxsep; cls=EHORZGRP {
let (_, utastmain) = utast in
UTMandatoryArgument(make_standard (Tok opn) (Tok cls) utastmain)
}
| opn=BVERTGRP; utast=vxblock; cls=EVERTGRP {
let (_, utastmain) = utast in
UTMandatoryArgument(make_standard (Tok opn) (Tok cls) utastmain)
}
| opt=OPTIONAL; BMATHGRP; utast=mathblock; cls=EMATHGRP {
let (_, utastmain) = utast in
UTOptionalArgument(make_standard (Tok opt) (Tok cls) utastmain)
}
| opt=OPTIONAL; BHORZGRP; utast=sxsep; cls=EHORZGRP {
let (_, utastmain) = utast in
UTOptionalArgument(make_standard (Tok opt) (Tok cls) utastmain)
}
| opt=OPTIONAL; BVERTGRP; utast=vxblock; cls=EVERTGRP {
let (_, utastmain) = utast in
UTOptionalArgument(make_standard (Tok opt) (Tok cls) utastmain)
}
| utcmdarg=narg { utcmdarg }
;
sxblock:
| ih=ih { let rng = make_range_from_list ih in (rng, UTInputHorz(ih)) }
Expand Down

0 comments on commit e02bb58

Please sign in to comment.