Files
PPL-Fall-2018/Corgi/corgiCFG.txt
2018-10-15 12:47:14 -06:00

67 lines
1.8 KiB
Plaintext
Executable File

Note: this is the draft grammar, with notes and some thoughts,
for the Project 2 version of Corgi
------------------
<program> -> <funcCall> <funcDefs>
<funcDefs> -> <funcDef> | <funcDef> <funcDefs>
<funcDef> -> def <funcName> ( ) end |
def <funcName> ( <params> ) end |
def <funcName> ( ) <statements> end
def <funcName> ( <params> ) <statements> end
<funcName> -> <var>
<params> -> <var> | <var> <params>
<statements> -> <statement> |
<statement> <statements>
<funcCall> -> <var> ( ) |
<var> ( <args> )
<args> -> <expr> | <expr> <args>
<statement> -> <string> |
<var> = <expr> |
<funcCall> |
if <expr> else end |
if <expr> else <statements> end |
if <expr> <statements> else end |
if <expr> <statements> else <statements> end |
return <expr>
<expr> -> <term> | <term> + <expr> | <term> - <expr>
<term> -> <factor> | <factor> * <term> | <factor> / <term>
<factor> -> <number> | <var> |
( <expr> ) |
- <factor> |
<funcCall>
Notes:
slightly bizarre but cool: in Corgi you can just type a string anywhere
as a statement and it gets sent to the console (still have to use
print( <expr> ) to send a number)
no boolean type---use "non-zero is true, 0 is false"
there's only the if-else---always have to use it
no loop statements---use recursion!
the built-in functions fit the grammar just like user-defined functions---
will execute differently
change the Lexer to remove /* ..... */ type of comments---no tokens
produced
change Lexer to allow \n inside a string---put \\ in the Java string
Need to agree on names for all the many BIF's---see upcoming document