|
|
||
|---|---|---|
| .gitignore | ||
| LICENSE | ||
| compiler.py | ||
| example.graph | ||
| main.py | ||
| readme.md | ||
| syntax.txt | ||
| tokens.txt | ||
readme.md
YTD Graphing Language
Implementation still in progress.
Lexical Definition
Comments
Comments can either be single-line comments or multi-line comments.
Single-line comments start with # and end at the end of a line.
Identifiers
Can be up to 31 characters in length, and are case sensitive. They cannot be a keyword.
Identifier ::= ID_Start*
ID_Start ::= <Any latin alphabet ligature: "A"-"Z", "a"-"z">
Keywords
Keywords are not case sensitive.
screen graph anim const
sum pi alpha beta
theta inf product integral
Literals
number ::= decinteger | pointfloat | exponentfloat
decinteger ::= nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")*
nonzerodigit ::= "1"..."9"
digit ::= "0"..."9"
pointfloat ::= ([digitpart] fraction) | (digitpart ".")
exponentfloat ::= (digitpart | pointfloat) exponent
digitpart ::= digit (["_"] digit)*
fraction ::= "." digitpart
exponent ::= ("e" | "E") ["+" | "-"] digitpart
Punctuation
+ - * / % ^
= ! < <= > >=
{ } [ ] ( )
_ -> , ; : ∑
∏ ∞ ≠ ≤ ≥ ∫
α β π → θ
Punctuation Conversions
| Original | New |
|---|---|
| <= | ≤ |
| >= | ≥ |
| -> | → |
Keyword Conversions
| Original | New |
|---|---|
| sum | ∑ |
| pi | π |
| alpha | α |
| beta | β |
| inf | ∞ |
| product | ∏ |
| integral | ∫ |
| theta | θ |
Syntax
The syntactical structure starts with a file at the root.
File
A file can contain any number of the following elements:
- Screen
- Graph
- Animation
- Constant
Screen
A screen begins with the screen keyword. It then has a comma (,)
separated list enclosed in curly braces ({ and }) of screen parameters.
At most only one screen block is allowed per file.
Screen parameter
A screen parameter begins with its parameter name then a colon (:) followed
by its value.
Listed bellow are the possible parameters.
Top
- Role: Sets the Y-Coordinate of the top of the screen to the given value.
- Required: False
- Default:
Unset - Possible Values: Integers,
Unset
Bottom
- Role: Sets the Y-Coordinate of the bottom of the screen to the given value.
- Required: False
- Default:
Unset - Possible Values: Integers,
Unset
Right
- Role: Sets the X-Coordinate of the right of the screen to the given value.
- Required: False
- Default:
Unset - Possible Values: Integers,
Unset
Left
- Role: Sets the X-Coordinate of the left of the screen to the given value
- Required: False
- Default:
Unset - Possible Values: Integers,
Unset
Width
- Role: Sets the X-Coordinate range of the screen to the given value
- Required: False
- Default:
Unset - Possible Values: Natural Numbers,
Unset - Note:
Centered on zero if
rightandleftare unset. The range usesrightorleftif one is set. Has no affect ifrightandleftare set.
Height
- Role: Sets the Y-Coordinate range of the screen to the given value
- Required: False
- Default:
Unset - Possible Values: Natural Numbers,
Unset - Note:
Centered on zero if
topandbottomare unset. The range usestoporbottomif one is set. Has no affect iftopandbottomare set.
Width Scale
- Role: Sets the X-Coordinate range of the screen to the screen pixel width divided by the given value
- Required: False
- Default:
20 - Possible Values: Positive Real Numbers
- Note:
Centered on zero if
rightandleftare unset. Has no affect ifrightandleftare set or ifwidthis set.
Height Scale
- Role: Sets the Y-Coordinate range of the screen to the screen pixel height divided by the given value
- Required: False
- Default:
20 - Possible Values: Positive Real Numbers
- Note:
Centered on zero if
topandbottomare unset. Has no affect iftopandbottomare set or ifheightis set.
FPS
- Role: Sets the refresh rate of the screen
- Required: False
- Default:
30 - Possible Values: Natural Numbers
Graph
A graph begins with the graph keyword. It then has a comma (,)
separated list enclosed in curly braces ({ and }) of graph parameters.
A graph block defines a graph to be drawn.
Graph parameter
A graph parameter begins with its parameter name then a colon (:) followed
by an expression.
Listed bellow are the possible parameters and their possible roles.
Any ranges can be the identifier of an animation or an inline animation.
X
- The
x = f(y)function foryindependent cartesian equations. - The
x = f(t)function for parametric equations. - The
xrange (animation) forxindependent cartesian equations.
Y
- The
y = f(x)function forxindependent cartesian equations. - The
y = f(t)function for parametric equations. - The
yrange (animation) foryindependent cartesian equations.
T
- The
trange (animation) for parametric equations.
R
- The
r = f(θ)function for polar equations.
θ
- The
θrange (animation) for polar equations.
Color functions
- The
c = f(x)function forxindependent cartesian equations. - The
c = f(y)function foryindependent cartesian equations. - The
c = f(t)function for parametric equations. - The
c = f(θ)function for polar equations.
Color Functions
Color function parameter names are C_x where the x is color space part subscript. Only one color space can be used in each graph. If only alpha is set the default color space is Grey-scale.
Listed bellow are the available color spaces and their subscripts. Default value in parenthesis for the unused subscripts of the color spaces.
- Grey-scale:
w,a- Grey-scale (1), Alpha (1) - RGB:
r,g,b,a- Red (0), Green (0), Blue (0), Alpha (1) - HSL:
h,s,l,a- Hue (0), Saturation (1), Luminosity (0.5), Alpha (1)
All values can be a real number between 0 and 1 inclusive. Values bellow this range will be interpreted as 0. Values above this range will be interpreted as 1.
Animation
An animation begins with the anim keyword. Unless it is an
inline animation block, the keyword is followed by its identifier. It then
has a comma (,) separated list enclosed in curly braces ({ and })
of animation parameters.
When an animation is used in an expression, the value it is evaluated as is in the range defined, changing by the step every frame.
Animation parameter
An animation parameter begins with its parameter name then a colon (:)
followed by an expression. If it is the only parameter the parameter name for
the range is optional.
Listed bellow are the possible parameters. Only the range parameter is required.
R Range: R: expression ≤ x ≤ expression
S Step: S: expression
- Default is
1/10unless a range expression is multiplied byπthen it isπ/32.
D Direction: D: direction
increase(default)decreasebounce
Constant
A constant begins with the const keyword. It then is followed by an
identifier, the assignment operator (=) followed by an expression then
ended with a semicolon (;).
Expressions
Unary Expression
A unary expression is made up of one expression and one unary operator.
The operator may come before or after the expression.
Binary Expression
A binary expression is made up of one expression, then one
binary operator, then another expression.
Function
A function starts with an identifier followed by a comma (,)
separated list enclosed in parentheses (( and )) of function arguments.
Function Argument
A function argument is an expression.
Enclosed Expression
An enclosed expression is simply an expression enclosed in parentheses
(( and )).
Operator
Here are all operators and their types and names in order of precedence.
| Operator | Type | Name |
|---|---|---|
- |
Unary (Prefix) | Negate Operator |
! |
Unary (Postfix) | Factorial Operator |
^ |
Binary | Exponential Operator |
_ |
Binary | Subscript Operator |
/ |
Binary | Division Operator |
% |
Binary | Modulus Operator |
* |
Binary | Multiplication Operator |
- |
Binary | Subtraction Operator |
+ |
Binary | Addition Operator |
= |
Binary | Assignment Operator |
Note: The assignment operator (=) can only be used in a Constant
Literal
A literal is just simply the content of the literal.
Identifier
A identifier is just simply the name of the identifier.