From 4108f5b7970e27123e9c2cb118b0d7c73a0bc491 Mon Sep 17 00:00:00 2001 From: Ben Wiedermann Date: Tue, 1 Sep 2015 15:16:25 -0700 Subject: [PATCH 01/10] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 58c308e..16cd639 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -[Assignment HOWTO]: https://github.com/hmc-cs111-fall2014/hmc-cs111-fall2014.github.io/wiki/Assignment-HOWTO +[Assignment HOWTO]: https://github.com/hmc-cs111-fall2015/hmc-cs111-fall2015.github.io/wiki/Assignment-HOWTO [Fowler]: https://sakai.claremont.edu/access/content/group/CX_mtg_80056/Fowler_Chapter2.pdf [markdown]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet # What _is_ a DSL? -###### _Submission deadline: Monday, Sept. 8 at 11:59pm_ -###### _Critique deadline: Wednesday, Sept. 10 at noon_ +###### _Submission deadline: Monday, Sept. 9 at 11:59pm_ +###### _Critique deadline: Wednesday, Sept. 11 at noon_ In this assignment, you'll read an introductory chapter about DSLs, which will give us some shared terminology for talking about DSLs and their From a3f5a93a828d021c9bd2a64d55ca7283ff40b4c5 Mon Sep 17 00:00:00 2001 From: Ben Wiedermann Date: Tue, 1 Sep 2015 18:38:58 -0700 Subject: [PATCH 02/10] Fixed dates --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 16cd639..9e93834 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ [markdown]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet # What _is_ a DSL? -###### _Submission deadline: Monday, Sept. 9 at 11:59pm_ -###### _Critique deadline: Wednesday, Sept. 11 at noon_ +###### _Submission deadline: Monday, Sept. 7 at 11:59pm_ +###### _Critique deadline: Wednesday, Sept. 9 at noon_ In this assignment, you'll read an introductory chapter about DSLs, which will give us some shared terminology for talking about DSLs and their From e39f2aaf87f054cbd605155852431a9d34429324 Mon Sep 17 00:00:00 2001 From: Ben Wiedermann Date: Tue, 1 Sep 2015 20:18:23 -0700 Subject: [PATCH 03/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9e93834..d1a33bc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ [Assignment HOWTO]: https://github.com/hmc-cs111-fall2015/hmc-cs111-fall2015.github.io/wiki/Assignment-HOWTO -[Fowler]: https://sakai.claremont.edu/access/content/group/CX_mtg_80056/Fowler_Chapter2.pdf +[Fowler]: https://sakai.claremont.edu/access/content/group/CX_mtg_85077/Fowler_Chapter2.pdf [markdown]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet # What _is_ a DSL? From cd831ae431dbd1137aadd7e979bbb2478b12a5cd Mon Sep 17 00:00:00 2001 From: Ben Wiedermann Date: Tue, 1 Sep 2015 20:18:54 -0700 Subject: [PATCH 04/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d1a33bc..42f2b1e 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ In this assignment, you'll read an introductory chapter about DSLs, which will give us some shared terminology for talking about DSLs and their implementations. Then you'll find a DSL "in the wild" and describe its design and implementation using terminology from the reading. Finally, you'll write a -program in a cool DSL: ContextFree. +program in an interesting DSL: ContextFree. After this assignment, you should be able to: From d3599902f9332a20675cb8df07b6629321d64b63 Mon Sep 17 00:00:00 2001 From: Ben Wiedermann Date: Tue, 1 Sep 2015 20:19:36 -0700 Subject: [PATCH 05/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 42f2b1e..fcc04a5 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ free to talk about the assignment with anyone). For the critique part of the assignment, you'll pick a partner and review each other's work. ## Read up on the assignment workflow -This [article][Assignment HOWTO] describes how we'll do our assignments on +[This article][Assignment HOWTO] describes how we'll do our assignments on GitHub. Be sure to read it before you start working on your assignment. ## Read Fowler's introduction to DSLs From dac700856fb2f9c422b710152621d7770eae0623 Mon Sep 17 00:00:00 2001 From: Ben Wiedermann Date: Tue, 1 Sep 2015 20:21:21 -0700 Subject: [PATCH 06/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fcc04a5..4c99a68 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ _1 This copy of the reading is for class use only. You should not dis class is over._ ## Find a DSL -Find a DSL---one that you think several other people in the class *won’t* know. +Find a DSL---one that you think most other people in the class *won’t* know. When picking a DSL, it's good to find one for which you can find a few example programs, so you can get a good sense of it. Sometimes it's hard to be sure whether or not a language is actually a DSL. That's okay! If you find a From 6593831d0e824f6972f2b926c07291ea8f2a22d4 Mon Sep 17 00:00:00 2001 From: Ben Wiedermann Date: Wed, 2 Sep 2015 09:45:55 -0700 Subject: [PATCH 07/10] Updating due dates --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4c99a68..bce6e57 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ [markdown]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet # What _is_ a DSL? -###### _Submission deadline: Monday, Sept. 7 at 11:59pm_ -###### _Critique deadline: Wednesday, Sept. 9 at noon_ +###### _Submission deadline: Sunday, Sept. 6 at 11:59pm_ +###### _Critique deadline: Tuesday, Sept. 8 at 11:59pm_ In this assignment, you'll read an introductory chapter about DSLs, which will give us some shared terminology for talking about DSLs and their From eb59b6ac11630899ca60edaffba4f075e0eecb6e Mon Sep 17 00:00:00 2001 From: Ben Wiedermann Date: Wed, 2 Sep 2015 15:58:30 -0700 Subject: [PATCH 08/10] Update README.md --- README.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bce6e57..97b6504 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,26 @@ uniquely identifies this version of your program). 4. Answer the questions in `context-free.md`. +## Identify your peer-review partner(s) +Your name is on the left side of this table; the person whose work you should review is on the right side of this table: + +| Your name | Your critique partner's name | +| ----------- | --------------------------- | +| Adam | Daniel H. | +| Alex O. | Daniel O. | +| Alex P. | Justis | +| Anna | Matt | +| Ben | Men Cheol | +| Dan W. | Robin | +| Daniel H. | Zoab | +| Daniel O. | Adam | +| Justis | Alex O. | +| Matt | Alex P. | +| Men Cheol | Anna | +| Robin | Ben | +| Zoab | Dan W. | + + ## Peer-review your partner's work Once your partner has submitted, you can comment on their work. You should provide feedback on all aspects of your partner's work, including the @@ -96,7 +116,6 @@ might add to your partner's work? ## Tasks -- [ ] Identify a partner for the critique part of the assignment - [ ] Read the [Assignment HOWTO] - [ ] Read Fowler's [introduction to DSLs][Fowler] - [ ] Find a DSL @@ -105,4 +124,4 @@ might add to your partner's work? - [ ] Make and save a pretty picture in `firstname_lastname_variant.png` - [ ] Answer the questions in `context-free.md` - [ ] Submit your work -- [ ] Comment on your partner's work +- [ ] Comment on your critique partner's work From 9b208ee335b2e7891c3ad8d2c361aa51777de5c7 Mon Sep 17 00:00:00 2001 From: Anna Pinson Date: Sat, 5 Sep 2015 12:54:23 -0700 Subject: [PATCH 09/10] Hopefully pushed changes to my-dsl.md --- my-dsl.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/my-dsl.md b/my-dsl.md index 3bbac9a..500b7b3 100644 --- a/my-dsl.md +++ b/my-dsl.md @@ -2,37 +2,85 @@ _What is the name of the language? Link the name to its webpage (if appropriate)._ +[Lout](http://www.adrianjwells.freeuk.com/lout.pdf) is a high-level markup language, similar to LaTex. # Domain _Describe the language's domain in five words._ +Typesetting documents, diagrams, and illustrations. # Computational model _What is the underlying computational model of this language? To answer this question, provide a high-level description (no more than 100 words) of the computation that occurs when someone executes a program in this language._ +Lout is a document formatter, so it reads a line of the Lout document and evaluates the expression(s) to generate a line of formatted text to add to the output document. It uses lazy evaluation to handle expressions, and can format computer program code in multiple languages, including C++, Java, Python, Perl, Ruby and Haskell. # DSL-ness _Fowler writes about a spectrum of languages, from general-purpose languages to "purely" domain-specific. Where does the DSL you chose fall on this spectrum, and why?_ +If document formatting is considered to be a tight enough domain, then Lout is very domain-specific, as it was designed solely for this purpose and has practically no use outside of it. # Internal or external? _Is the language implemented as an internal or external DSL? Justify your answer._ +This language is mostly external. It draws from Tex in some ways, but overall has its own grammar. + +Here is a sample of code from the [Wikipedia page](https://en.wikipedia.org/wiki/Lout_(software)): + +``` +# This is a comment. + +# Use the `doc' document class and its default style. +@SysInclude { doc } + +@Document +@InitialFont { Times Base 10p } +// + +# Beginning of document contents. +@Text @Begin + +@PP +This is a paragraph. One can easily embed @B { bold } or +@I { italic } text. One can also easily change the style of +text, such as { Helvetica Base } @Font { changing the font +being used }. + +@BeginSections +@Section @Title { The First Section } +@Begin + +@PP +This is the content of a section. + +@End @Section +@EndSections + +@End @Text +# End of the document. +``` # Host language _What language(s) was (were) used to implement the DSL?_ +Lout was first developed with influence from the eqp equation formatter and the Scribe system, and since then the only non-original extensions and improvements were the optimal paragraph breaking and automatic hyphenation of Tex. # Benefits _Identify one potential benefit of the DSL: how is a programmer's life or a company's bottom line made easier by the existence of this language?_ +Lout's biggest strangth is its ability to generate complex digrams, as well as its focus on simplicity and availability for a wide spread of users, including those who aren't familiar with programming. +It's quick and easy to learn, which companies in particular would find useful, as would programmers on a tight schedule who need to pick up a markup language and don't wish to spend time learning a more complex one. +It's also very compact taking up only 1MB of space compared to LaTex's 50-300 MB. + # Drawbacks _Identify one potential drawback of the DSL: what does a programmer or company lose by using this DSL instead of a general-purpose language?_ + +The core language is very primitive, consisting of only a few operators. First-class functions aren't provided, and in Lout it would be impossible to, say, take in input data and generate a document by automatically adding in text and formatting. +If a company didn't need to generate complex diagrams or word and textox formatting, they may find it easier to use a simpler markup language, or one that their employees may be more familiar with, like Tex. \ No newline at end of file From 022213a52f2b9222e039e32f40273d62888d01c1 Mon Sep 17 00:00:00 2001 From: Anna Pinson Date: Sat, 5 Sep 2015 14:56:50 -0700 Subject: [PATCH 10/10] Finished context-free portion --- anna_pinson.cfdg | 139 ++++++++++++++++++++++++++++++++++++++++++++ anna_pinson_PCE.png | Bin 0 -> 7353 bytes context-free.md | 10 ++++ 3 files changed, 149 insertions(+) create mode 100644 anna_pinson.cfdg create mode 100644 anna_pinson_PCE.png diff --git a/anna_pinson.cfdg b/anna_pinson.cfdg new file mode 100644 index 0000000..54c5ed1 --- /dev/null +++ b/anna_pinson.cfdg @@ -0,0 +1,139 @@ +/*MissingNo.*/ + +startshape MO + +shape MO +{ + RANDSTRIP [[ x 1.75 y 2.74 ]] + RANDSTRIP [[ x 2.25 y 2.74 ]] + ALT_RANDSTRIP_1 [[ x 2.75 y -2.26 ]] + RANDSTRIP [[ x 3.25 y 2.74 ]] + EYETWO [[x 2 y -2.77]] + ALT_RANDSTRIP_2 [[ x 3.75 y 1.74 ]] + EYEONE [[x 3.77 y 2.5]] + RANDSTRIP [[ x 4.25 y 2.74 ]] + TOPWHITE [[]] + RANDSTRIP [[ x 4.75 y 2.74 ]] + RANDSTRIP [[ x 5.25 y 2.74 ]] + RANDSTRIP [[ x 5.75 y 2.74 ]] + RANDSTRIP [[ x 6.25 y 2.74 ]] + +} + +shape TOPWHITE +{ + SQUARE [[ x 2.375 y 0.5 s 1.76 5.1 b 1 ]] +} + +shape EYEONE +{ + SQUARE [[ b 1 ]] + SQUARE [[ x -0.35 y 0.36 s 0.25 ]] +} + +shape EYETWO +{ + SQUARE [[ s 1.75 1 b 1 ]] + SQUARE [[ x -0.35 y 0.2 s 0.25 ]] +} + +shape RANDSTRIP +{ + RANDTILE [[]] + RANDTILE [[x 0 y -0.5]] + RANDTILE [[x 0 y -1]] + RANDTILE [[x 0 y -1.5]] + RANDTILE [[x 0 y -2]] + RANDTILE [[x 0 y -2.5]] + RANDTILE [[x 0 y -3]] + RANDTILE [[x 0 y -3.5]] + RANDTILE [[x 0 y -4]] + RANDTILE [[x 0 y -4.5]] + RANDTILE [[x 0 y -5]] + RANDTILE [[x 0 y -5.5]] + RANDTILE [[x 0 y -6]] + RANDTILE [[x 0 y -6.5]] + RANDTILE [[x 0 y -7]] + RANDTILE [[x 0 y -7.5]] + RANDTILE [[x 0 y -8]] + RANDTILE [[x 0 y -8.5]] + RANDTILE [[x 0 y -9]] + RANDTILE [[x 0 y -9.5]] + RANDTILE [[x 0 y -10]] + RANDTILE [[x 0 y -10.5]] +} + +shape ALT_RANDSTRIP_1 +{ + RANDTILE [[]] + RANDTILE [[x 0 y -0.5]] + RANDTILE [[x 0 y -1]] + RANDTILE [[x 0 y -1.5]] + RANDTILE [[x 0 y -2]] + RANDTILE [[x 0 y -2.5]] + RANDTILE [[x 0 y -3]] + RANDTILE [[x 0 y -3.5]] + RANDTILE [[x 0 y -4]] + RANDTILE [[x 0 y -4.5]] + RANDTILE [[x 0 y -5]] + RANDTILE [[x 0 y -5.5]] +} + +shape ALT_RANDSTRIP_2 +{ + RANDTILE [[]] + RANDTILE [[x 0 y -0.5]] + RANDTILE [[x 0 y -1]] + RANDTILE [[x 0 y -1.5]] + RANDTILE [[x 0 y -2]] + RANDTILE [[x 0 y -2.5]] + RANDTILE [[x 0 y -3]] + RANDTILE [[x 0 y -3.5]] + RANDTILE [[x 0 y -4]] + RANDTILE [[x 0 y -4.5]] + RANDTILE [[x 0 y -5]] + RANDTILE [[x 0 y -5.5]] + RANDTILE [[x 0 y -6]] + RANDTILE [[x 0 y -6.5]] + RANDTILE [[x 0 y -7]] + RANDTILE [[x 0 y -7.5]] + RANDTILE [[x 0 y -8]] + RANDTILE [[x 0 y -8.5]] + RANDTILE [[x 0 y -9]] + RANDTILE [[x 0 y -9.5]] +} + +shape RANDTILE +rule { + SQUARE [[ s 0.5 ]] +} +rule { + SQUARE [[ s 0.5 b 0.1 ]] +} +rule { + SQUARE [[ s 0.5 b 0.2 ]] +} +rule { + SQUARE [[ s 0.5 b 0.3 ]] +} +rule { + SQUARE [[ s 0.5 b 0.4 ]] +} +rule { + SQUARE [[ s 0.5 b 0.5 ]] +} +rule { + SQUARE [[ s 0.5 b 0.6 ]] +} +rule { + SQUARE [[ s 0.5 b 0.7 ]] +} +rule { + SQUARE [[ s 0.5 b 0.8 ]] +} +rule { + SQUARE [[ s 0.5 b 0.9 ]] +} +rule { + SQUARE [[ s 0.5 b 1 ]] +} \ No newline at end of file diff --git a/anna_pinson_PCE.png b/anna_pinson_PCE.png new file mode 100644 index 0000000000000000000000000000000000000000..5703ee27f7b36ed05a18f17d3efd1fecaf99312a GIT binary patch literal 7353 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

dAwh3x`p-r$=&gBs?{TYO7r`}xhV?mW+Nxq zwf86(MBBeGk%+nVFh&)%AI(8+b`q$?3lR^s62T?d+MaV*Br z3mc_FCPx6s34!f-$+*k-!&E|COa>7>i#LH*F3VupkSoZGf8srtesKOr2%Y+dZs;2w z!yKFr^0t9SGS2Nmm1xrdg(Vr(m*e~gO8%q#|4l?8oe1s5&kHi!(Rh{4Mx1o?51GTL zl1*KaXLv5h%_pk9r~97 zWeDS&CJNZXyl;GQxDSK0ymJ4yY}y&>(*qh|2YO&oBfxmV;Y2roheF*~$?%89|$moCDQpVMRdyO2kTMp_$J>&`a^9wd(fE9F?8Vwbpe za^H@Al0!rrip#{#!t;0*Ov`_om#mk9n!^je>8@;)wk1suR9;E@5+7Ga{cbzmZ ztTzhI+YKmd*{ho~FGbYQ*ZoMY5l_5lJj$He7&v_@Ay;$b)X(N(56j7KR0;GPxT5kx zq}$0U5h)c(Zi`pxY+@1bG>H3>> z{e#IGXfbednVsIB)@Y{a+H3!~Sgw4btBCq8ci*PnD{ea`uV1CZXrh3g0b%yiF5NLJ zc}bvW3HyXlQ-5^NijRcX6>H;euiC0!jRFK7g5rshVrVO9B#j{o%mFs)1h1H{o*|8{ z0KVvQm*nzjg~m^$sqeokL!?)h=kh!j*$wwqC|_8Ry3|u($P{qiB|w3Q{=MiC$}|d1 z04+SvnkFf)&xyC>N_jp{8vB|FI|HtGcT?oA1Uf>25OI&m6ll*$-i)WEta*Bc!lUu+$L}mPU zKa}DZKhj?bT!julKJu;f!%@!%mwV~DIIN(32CU3uAiv+ie%hFg&NGaIY}gv$o1sMQ zM|ZKaRV2N-x})np5(%c&Q@%^!5Zqv{ZOL=hJ}UN)^p;iN2Awh{or+@ zV45(zZE$7uAo6&Ln_MY&hEBKN{VAJX_a2=}fCY4dOM@#J?9V1I@?a- zHvIahh|?KcVl^SaBo}QOo)D9<9Z!a?|EBP<#lDWc>EEY;zf;w5nX_NMS^v>_*s=$Z zd2;V