platypus/PLATYPUS Grammar Specificat...

329 lines
8.0 KiB
Plaintext
Raw Normal View History

2017-04-28 21:15:46 +00:00
# PLATYPUS Language Specification
### 2.1 Input Elements and Tokens
<input character> ->
ASCII characters but not SEOF
<input> ->
<input elements> SEOF
<input elements> ->
<input element> | <input elements> <input element>
<token> ->
<variable identifier> | <keyword> | <floating-point literal>
| <integer literal> | <string literal> | <separator> | <operator>
### 2.2 White Space
<white space> ->
ASCII SP character (space)
| ASCII HT character (horizontal tab)
| ASCII VT character (vertical tab)
| ASCII FF character (form feed)
| <line terminator>
<line terminator> ->
CR | LF | CR LF
### 2.3 Comments
<comment> ->
!< <opt_characters in line> <line terminator>
<characters in line> ->
<comment character> | <characters in line> <comment character>
<comment character> ->
<input character> but not <line terminator>
### 2.4 Variable Identifiers
<variable identifier> ->
<arithmetic variable identifier> | <string variable identifier>
<arithmetic identifier> ->
<letter> <opt_letters or digits>
<opt_letters or digits> ->
ε | <letters or digits>
<letters or digits> ->
<letter or digit> | <letters or digits> <letter or digit>
<letter> ->
[a-z] | [A-Z]
<letter or digit> ->
<letter> | <digit>
<string variable identifier> ->
<arithmetic variable identifier>#
### 2.5 Keywords
<keyword> ->
PLATYPUS | IF | THEN | ELSE | USING | REPEAT | INPUT | OUTPUT
### 2.6 Integer Literals
<integer literal> ->
<decimal integer literal> | <octal integer literal>
<decimal integer literal> ->
0 | <non-zero digit> <opt_digits>
<opt_digits> ->
ε | <digits>
<digits> ->
<digit> | <digits> <digit>
<digit> ->
0 | <non-zero digit>
<non-zero digit> -> one of
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<octal integer literal> ->
0 <octal digit> <octal digits>
<octal digit> ->
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
<octal digits> ->
<octal digit> | <octal digits> <octal digit>
### 2.7 Floating-point Literals
<floating-point literal> ->
<decimal integer literal> . <opt_digits>
### 2.8 String Literals
<opt_string literal> ->
ε | <string literal>
<string literal> ->
"<opt_string characters>"
<opt_string characters> ->
ε | <string characters>
<string characters> ->
<input character> | <string characters> <input character>
### 2.9 Separators
<separator> ->
( | ) | { | } | , | ; | " |.
### 2.10 Operators
<operator> ->
<arithmetic operator> | <string concatenation operator>
| <relational operator> | <logical operator>
| <assignment operator>
<arithmetic operator> ->
+ | - | * | /
<string concatenation operator> ->
<<
<relational operator> ->
> | < | == | <>
<logical operator> ->
.AND. | .OR.
<assignment operator> ->
=
## 3. The PLATYPUS Syntactic Specification
### 3.1 PLATYPUS Program
<program> ->
PLATYPUS {<opt_statements>} SEOF
<opt_statements> ->
ε | <statements>
<statements> ->
<statement> | <statements> <statement>
### 3.2 Statements
<statement> ->
<assignment statement>
| <selection statement>
| <iteration statement>
| <input statement>
| <output statement>
### 3.3 Assignment Statement
<assignment statement> ->
<assignment expression> ;
<assignment expression> ->
<arithmetic variable identifier> = <arithmetic expression>
| <string variable identifier> = <string expression>
#### 3.2.2 Selection Statement (`if` statement)
<selection statement> ->
IF (<conditional expression>) THEN <opt_statements>
ELSE {<opt_statements>};
#### 3.2.3 Iteration Statement (the loop statement)
<iteration statement> ->
USING (<assignment expression> , <conditional expression>, <assignment expression>) REPEAT { <opt_statements> };
#### 3.2.4 Input Statement
<input statement> ->
INPUT (<variable list>);
<opt_variable list> ->
ε | <variable list>
/** New Variable List version below
<variable list> ->
<variable identifier> | <variable list>,<variable identifier>
**/
<variable list> ->
<variable identifier> <variable list'>
<variable list'> ->
, <variable identifier> <variable list'> | E
#### 3.2.5 Output Statement
<output statement> ->
OUTPUT(<opt_variable list> | <opt_string literal>);
### 3.3 Expressions
#### 3.3.1 Arithmetic Expressions
<arithmetic expression> ->
<unary arithmetic expression>
| <additive arithmetic expression>
<unary arithmetic expression> ->
- <primary arithmetic expression>
| + <primary arithmetic expression>
/** New Version of Additive Arithmetic Expressions below
<additive arithmetic expression> ->
<additive arithmetic expression> + <multiplicative arithmetic expression>
| <additive arithmetic expression> - <multiplicative arithmetic expression>
| <multiplicative arithmetic expression>
**/
<additive arihtmetic expression> ->
<multiplicative arithmetic expression> <additive arithmetic expression'>
<additive arithmetic expression'> ->
+ <multiplicative arithmetic expression> <additive arithmetic expression'>
| - <multiplicative arithmetic expression> <additive arithmetic expression'>
/** New Version of Mult. Arithmetic Expressions below
<multiplicative arithmetic expression> ->
<multiplicative arithmetic expression> * <primary arithmetic expression>
| <multiplicative arithmetic expression> / <primary arithmetic expression>
| <primary arithmetic expression>
**/
<multiplicative arithmetic expression> ->
<primary arithmetic expression> <multiplicative arithmetic expression'>
<multiplicative arithmetic expression'> ->
* <primary arithmetic expression> <multiplicative arithmetic expression'>
| / <primary arithmetic expression> <multiplicative arithmetic expression'>
<primary arithmetic expression> ->
<variable identifier>
| <floating-point literal>
| <integer literal>
| (<arithmetic expression>)
#### 3.3.2 String Expression
/** New version of String Expressions below
<string expression> ->
<primary string expression>
| <string expression> << <primary string expression>
**/
<string expression> ->
<primary string expression> <string expression'>
<string expression'> ->
<< <primary string expression> <string expression'> | E
<primary string expression> ->
<string variable identifier>
| <string literal>
#### 3.3.3 Conditional Expression
<conditional expression> ->
<logical OR expression>
/** New Logical OR and Logical AND expressions below
<logical OR expression> ->
<logical AND expression>
| <logical OR expression> .OR. <logical AND expression>
<logical AND expression> ->
<relational expression>
| <logical AND expression> .AND. <relational expression>
**/
<logical OR expression> ->
<logical AND expression> <logical OR expression'>
<logical OR expression'> ->
.OR. <logical AND expression> <logical OR expression'>
<logical AND expression> ->
<relational expression> <logical AND expression'>
<logical AND expression'> ->
.AND. <relational expression> <logical AND expression'>
#### 3.3.4 Relational Expressions
/** New version of Relational expressions below
<relational expression> ->
<primary a_relational expression> <relational operator> <primary a_relational expression>
| <primary s_relational expression> <relational operator> <primary s_relational expression>
**/
<relational expression> ->
<primary a_relational expression> <primary a_relational expression'>
| <primary s_relational expression> <primary s_relational expression'>
<primary a_relational expression> ->
<floating-point literal>
| <integer literal>
| <variable identifier>
<primary a_relational expression'> ->
== <primary a_relational expression>
| <> <primary a_relational expression>
| > <primary a_relational expression>
| < <primary a_relational expression>
<primary s_relational expression> ->
<string literal> | <string variable identifier>
<primary s_relational expression'> ->
== <primary s_relational expression>
| <> <primary s_relational expression>
| > <primary s_relational expression>
| < <primary s_relational expression>