Here's an updated version using GrammarRules:
natlanggraphics =
CloudDeploy[
GrammarRules[{DelimitedSequence[
GrammarToken["GraphicsObject"]]}, {"Coordinate" ->
FixedOrder["{", x : GrammarToken["SemanticNumber"], ",",
y : GrammarToken["SemanticNumber"], "}"] :> {x, y},
"PointSet" ->
DelimitedSequence[GrammarToken["Coordinate"], {"{", ",", "}"}],
"Line" ->
FixedOrder["line from", a : GrammarToken["Coordinate"], "to",
b : GrammarToken["Coordinate"]] :> Line[{a, b}],
"Point" ->
FixedOrder["point at", a : GrammarToken["Coordinate"]] :>
Point[a],
"Square" ->
FixedOrder["square at", a : GrammarToken["Coordinate"]] :>
Rectangle[a],
"Rectangle" ->
FixedOrder["rectangle from", a : GrammarToken["Coordinate"],
"to", b : GrammarToken["Coordinate"]] :> Rectangle[a, b],
"Polygon" ->
FixedOrder["polygon with points",
p : GrammarToken["PointSet"]] :> Polygon[p],
"Circle" ->
FixedOrder["circle at", o : GrammarToken["Coordinate"],
"with radius", r : GrammarToken["SemanticNumber"]] :>
Circle[o, r],
"Disk" ->
FixedOrder["disk at", o : GrammarToken["Coordinate"],
"with radius", r : GrammarToken["SemanticNumber"]] :>
Disk[o, r],
"GraphicsObject" ->
GrammarToken["Line"] | GrammarToken["Circle"] |
GrammarToken["Disk"] | GrammarToken["Point"] |
GrammarToken["Square"] | GrammarToken["Rectangle"] |
GrammarToken["Polygon"]}
, AllowLooseGrammar -> True
]]
Graphics[Join@{Orange, Thickness[.01],
GrammarApply[natlanggraphics,
"circle at {3,3} with radius 2; line from {4.5,0.5} to {3,2}"]}, Axes -> True, GridLines -> Automatic,
PlotRange -> {{0, 7}, {0, 7}}, ImageSize -> 200]
I hadn't really gotten a chance to try out the new grammar construction functions until now, and I'm really impressed. The syntax takes a bit of getting used to, but it seems really powerful. The one peeve I have is that it has to be deployed to the cloud. It's really fairly simple work, and there's no reason other than Interpreter token classification that it couldn't be done locally. And I'm not a huge fan of getting this notification: