Implements all cranes.

This commit is contained in:
Elliot Glaysher 2018-05-14 17:07:00 -07:00
parent a4dfda9897
commit fdcfebb73d
2 changed files with 365 additions and 5 deletions

View File

@ -26,6 +26,15 @@
test-parse-scaffold-crane-fsbr
test-parse-scaffold-crane-fsts
test-parse-scaffold-crane-fsdt
test-parse-scaffold-crane-fscm
test-parse-scaffold-crane-fscn
test-parse-scaffold-crane-fspm
test-parse-scaffold-crane-fscb
test-parse-scaffold-crane-fssm
test-parse-scaffold-crane-fscl
test-parse-scaffold-crane-fskt
test-parse-scaffold-crane-fszp
test-parse-scaffold-crane-fszy
test-literal
test-autocons-same
test-autocons-different
@ -346,6 +355,7 @@
[1 1]
"""
/| /~ ~
/~ ~
==
// /%/child/hoon
"""
@ -358,8 +368,14 @@
libraries=~
^= crane
:~ :* %fsbr
[%fssg %dbug [/~nul/desk/~1234.5.6/bar/foo [1 9] [1 10]] [%bust %null]]~
== ==
:~ :* %fssg %dbug
[/~nul/desk/~1234.5.6/bar/foo [1 9] [1 10]]
[%bust %null]
==
:* %fssg %dbug
[/~nul/desk/~1234.5.6/bar/foo [2 9] [2 10]]
[%bust %null]
== == == ==
^= sources
:~ :* %indirect
[[~nul %desk [%da ~1234.5.6]] /hoon/child/foo/bar]
@ -425,7 +441,286 @@
:~ :* %indirect
[[~nul %desk [%da ~1234.5.6]] /hoon/child/foo/bar]
== == ==
::
++ test-parse-scaffold-crane-fscm
~& %test-parse-scaffold-crane-fscm
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /foo/bar]))
[1 1]
"""
/,
/path/to/a
/~ !. a=5
::
/path/to/b
/~ !. b=6
==
// /%/child/hoon
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fscm
:~ :- /path/to/a
:* %fssg %dbug
[/~nul/desk/~1234.5.6/bar/foo [3 7] [3 14]]
(ream 'a=5')
==
:- /path/to/b
:* %fssg %dbug
[/~nul/desk/~1234.5.6/bar/foo [6 7] [6 14]]
(ream 'b=6')
== == == ==
^= sources
:~ :* %indirect
[[~nul %desk [%da ~1234.5.6]] /hoon/child/foo/bar]
== == ==
::
++ test-parse-scaffold-crane-fscn
~& %test-parse-scaffold-crane-fscn
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /foo/bar]))
[1 1]
"""
/% /$ !. |=(a a)
// /%/child/hoon
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fscn %fsbc %dbug
[/~nul/desk/~1234.5.6/bar/foo [1 9] [1 20]]
(ream '|=(a a)')
== ==
^= sources
:~ :* %indirect
[[~nul %desk [%da ~1234.5.6]] /hoon/child/foo/bar]
== == ==
::
++ test-parse-scaffold-crane-fspm
~& %test-parse-scaffold-crane-fspm
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /foo/bar]))
[1 1]
"""
/= data /& mark /~ !. a=1
// /%/child/hoon
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %data
%fspm [%mark ~]
%fssg %dbug
[/~nul/desk/~1234.5.6/bar/foo [1 25] [1 32]]
(ream 'a=1')
== ==
^= sources
:~ :* %indirect
[[~nul %desk [%da ~1234.5.6]] /hoon/child/foo/bar]
== == ==
::
++ test-parse-scaffold-crane-fscb
~& %test-parse-scaffold-crane-fscb
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /foo/bar]))
[1 1]
"""
/_ /mark/
// /%/child/hoon
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fscb %fszy %mark
== ==
^= sources
:~ :* %indirect
[[~nul %desk [%da ~1234.5.6]] /hoon/child/foo/bar]
== == ==
::
++ test-parse-scaffold-crane-fssm
~& %test-parse-scaffold-crane-fssm
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /foo/bar]))
[1 1]
"""
/= data
/; !. |=(a=@u +(a))
/~ !. 5
// /%/child/hoon
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %data
%fssm
:* %dbug
[/~nul/desk/~1234.5.6/bar/foo [2 7] [2 24]]
(ream '|=(a=@u +(a))')
==
%fssg
:* %dbug
[/~nul/desk/~1234.5.6/bar/foo [3 7] [3 12]]
(ream '5')
== == ==
^= sources
:~ :* %indirect
[[~nul %desk [%da ~1234.5.6]] /hoon/child/foo/bar]
== == ==
::
++ test-parse-scaffold-crane-fscl
~& %test-parse-scaffold-crane-fscl
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /foo/bar]))
[1 1]
"""
/= tests
/: /===/tests
/_ /mark/
// /%/child/hoon
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %tests
%fscl [[~ ~[~ ~ ~ [~ [%sand %tas 495.874.958.708]]]] ~]
%fscb %fszy %mark
== ==
^= sources
:~ :* %indirect
[[~nul %desk [%da ~1234.5.6]] /hoon/child/foo/bar]
== == ==
::
++ test-parse-scaffold-crane-fskt
~& %test-parse-scaffold-crane-fskt
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /foo/bar]))
[1 1]
"""
/= data
/^ !. (list @ud)
/. /~ !. 1
/~ !. 2
==
// /%/child/hoon
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %data
%fskt
:* %dbug
[/~nul/desk/~1234.5.6/bar/foo [2 7] [2 21]]
(ream '(list @ud)')
==
%fsdt
:~ :* %fssg %dbug
[/~nul/desk/~1234.5.6/bar/foo [3 11] [3 16]]
(ream '1')
==
:* %fssg %dbug
[/~nul/desk/~1234.5.6/bar/foo [4 11] [4 16]]
(ream '2')
== == == ==
^= sources
:~ :* %indirect
[[~nul %desk [%da ~1234.5.6]] /hoon/child/foo/bar]
== == ==
::
++ test-parse-scaffold-crane-fszp
~& %test-parse-scaffold-crane-fszp
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /foo/bar]))
[1 1]
"""
/= data /!mark/
// /%/child/hoon
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %data
%fszp %mark
== ==
^= sources
:~ :* %indirect
[[~nul %desk [%da ~1234.5.6]] /hoon/child/foo/bar]
== == ==
::
++ test-parse-scaffold-crane-fszy
~& %test-parse-scaffold-crane-fszy
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /foo/bar]))
[1 1]
"""
/= data /mark/
// /%/child/hoon
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %data
%fszy %mark
== ==
^= sources
:~ :* %indirect
[[~nul %desk [%da ~1234.5.6]] /hoon/child/foo/bar]
== == ==
::
++ test-literal
~& %test-literal

View File

@ -1471,9 +1471,27 @@
(stag %fsts ;~(pfix tis parse-face))
:: `/.` null terminated list
(stag %fsdt ;~(pfix dot parse-list))
:: `/,` switch by path
(stag %fscm ;~(pfix com parse-switch))
:: `/%` propagate extra arguments into renderers
(stag %fscn ;~(pfix cen subcrane))
:: `/&` pass through a series of mark
(stag %fspm ;~(pfix pam parse-pipe))
:: `/_` run a crane on each file in the current directory
(stag %fscb ;~(pfix cab subcrane))
:: `/;` passes date through a gate
(stag %fssm ;~(pfix sem parse-gate))
:: `/:` evaluate at path
(stag %fscl ;~(pfix col parse-at-path))
:: `/^` cast
(stag %fskt ;~(pfix ket parse-cast))
:: `/!mark/ evaluate as hoon, then pass through mark
(stag %fszp ;~(pfix zap ;~(sfix sym fas)))
:: `/mark/` passes current path through :mark
(stag %fszy ;~(sfix sym fas))
==
==
:: +parse-alts
:: +parse-alts: parse a set of alternatives
::
++ parse-alts
%+ wide-or-tall
@ -1491,6 +1509,38 @@
%+ wide-or-tall
fail
;~(sfix (star subcrane) gap duz)
:: +parse-switch: parses a list of [path crane]
::
++ parse-switch
%+ wide-or-tall
fail
=- ;~(sfix (star -) gap duz)
;~(pfix gap fas ;~(plug static-path subcrane))
:: +parse-pipe: parses a pipe of mark conversions
::
++ parse-pipe
%+ wide-or-tall
;~(plug (plus ;~(sfix sym pam)) subcrane)
=+ (cook |=(a=term [a ~]) sym)
;~(pfix gap ;~(plug - subcrane))
:: +parse-gate: parses a gate applied to a crane
::
++ parse-gate
%+ wide-or-tall
;~(plug ;~(sfix wide:hoon-parser sem) subcrane)
;~(pfix gap ;~(plug tall:hoon-parser subcrane))
:: +parse-at-path: parses a late bound bath
::
++ parse-at-path
%+ wide-or-tall
;~(plug ;~(sfix late-bound-path col) subcrane)
;~(pfix gap ;~(plug late-bound-path subcrane))
:: +parse-cast: parses a mold and then the subcrane to apply that mold to
::
++ parse-cast
%+ wide-or-tall
;~(plug ;~(sfix wide:hoon-parser ket) subcrane)
;~(pfix gap ;~(plug tall:hoon-parser subcrane))
:: +crane: parses a subcrane
::
++ subcrane
@ -1503,7 +1553,7 @@
|* [wide=rule tall=rule]
?. allow-tall-form wide
;~(pose wide tall)
:: +hoon: parses hoon
:: +hoon: parses hoon as an argument to a crane
::
++ hoon
%+ wide-or-tall
@ -1518,6 +1568,21 @@
:: todo: ignoring :remote-location syntax for now as it is weird.
(easy ~)
==
:: +static-path: parses a path
::
++ static-path
(sear plex (stag %clsg (more fas hasp))):hoon-parser
:: +late-bound-path: a path whose time varies
::
++ late-bound-path
;~ pfix fas
%+ cook |=(a/truss a)
=> hoon-parser
;~ plug
(stag ~ gash)
;~(pose (stag ~ ;~(pfix cen porc)) (easy ~))
==
==
--
:: +per-event: per-event core
::