Merge branch 'master' of git.xeserv.us:victorvalenca/platypus

This commit is contained in:
Victor Fernandes 2017-03-06 10:59:20 -05:00
commit 214b6a49cd
3 changed files with 177 additions and 81 deletions

63
.gitattributes vendored Normal file
View File

@ -0,0 +1,63 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain

View File

@ -2,147 +2,152 @@
## 2. Lexical Specification (INCOMPLETE) ## 2. Lexical Specification (INCOMPLETE)
## NOTE: **This is incredibly incomplete and broken, I am simply writing this down and will fix it as I read along the informal language specification provided to me** ## NOTE:
**This is incomplete, I am simply writing this down and will fix it as I read along the informal language specification provided to me
This does not follow standard BNF/EBNF syntax, I will rewrite it once I get all the definitions correct and complete.**
### 2.1 Input Elements and Tokens ### 2.1 Input Elements and Tokens
``` ``` bnf
<input character> -> <input character> ::=
ASCII characters but not SEOF ASCII characters but not SEOF
<input> -> <input> ::=
<input elements> SEOF <input elements> SEOF
<input elements> -> <input elements> ::=
<input element> | <input elements> <input element> <input element> | <input elements> <input element>
<token> -> <token> ::=
<variable identifier> | <keyword> | <floating-point literal> <variable identifier> | <keyword> | <floating-point literal>
| <integer literal> | <string literal> | <separator> | <operator> | <integer literal> | <string literal> | <separator> | <operator>
``` ```
### 2.2 White Space ### 2.2 White Space
``` ```
<white space> -> <white space> ::=
ASCII SP character (space) ASCII SP character (space)
| ASCII HT character (horizontal tab) | ASCII HT character (horizontal tab)
| ASCII VT character (vertical tab) | ASCII VT character (vertical tab)
| ASCII FF character (form feed) | ASCII FF character (form feed)
| <line terminator> | <line terminator>
<line terminator> -> <line terminator> ::=
CR | LF | CR LF CR | LF | CR LF
``` ```
### 2.3 Comments ### 2.3 Comments
``` ```
<comment> -> <comment> ::=
!< <opt_characters in line> <line terminator> !< <opt_characters in line> <line terminator>
<characters in line> -> <characters in line> ::=
<comment character> | <characters in line> <comment character> <comment character> | <characters in line> <comment character>
<comment character> -> <comment character> ::=
<input character> but not <line terminator> <input character> but not <line terminator>
``` ```
### 2.4 Variable Identifiers ### 2.4 Variable Identifiers
``` ```
<variable identifier> -> <variable identifier> ::=
<arithmetic variable identifier> | <string variable identifier> <arithmetic variable identifier> | <string variable identifier>
<arithmetic identifier> -> <arithmetic identifier> ::=
<letter> <opt_letters or digits> <letter> <opt_letters or digits>
<letters or digits> -> <letters or digits> ::=
<letter or digit> | <letters or digits> <letter or digit> <letter or digit> | <letters or digits> <letter or digit>
<letter> -> one of <letter> ::= one of
[a-z][A-Z] [a-z][A-Z]
<letter or digit> -> one of <letter or digit> ::= one of
[a-z][A-Z][0-9] [a-z][A-Z][0-9]
<string variable identifier> -> <string variable identifier> ::=
<arithmetic variable identifier># <arithmetic variable identifier>#
``` ```
### 2.5 Keywords ### 2.5 Keywords
``` ```
<keyword> -> <keyword> ::=
PLATYPUS | IF | THEN | ELSE | USING | REPEAT | INPUT | OUTPUT PLATYPUS | IF | THEN | ELSE | USING | REPEAT | INPUT | OUTPUT
``` ```
### 2.6 Integer Literals ### 2.6 Integer Literals
``` ```
<integer literal> -> <integer literal> ::=
<decimal integer literal> | <octal integer literal> <decimal integer literal> | <octal integer literal>
<decimal integer literal> -> <decimal integer literal> ::=
0 | <non-zero digit> <opt_digits> 0 | <non-zero digit> <opt_digits>
<digits> -> <digits> ::=
<digit> | <digits> <digit> <digit> | <digits> <digit>
<digit> -> <digit> ::=
0 | <non-zero digit> 0 | <non-zero digit>
<non-zero digit> -> one of <non-zero digit> ::= one of
[1-9] 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<octal integer literal> -> <octal integer literal> ::=
0 <octal digit> <octal digits> 0 <octal digit> <octal digits>
<octal digit> -> <octal digit> ::=
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
<octal digits> -> <octal digits> ::=
<octal digit> | <octal digits> <octal digit> <octal digit> | <octal digits> <octal digit>
``` ```
### 2.7 Floating-point Literals ### 2.7 Floating-point Literals
``` ```
<floating-point literal> -> <floating-point literal> ::=
<decimal integer literal> . <opt_digits> <decimal integer literal> . <opt_digits>
``` ```
### 2.8 String Literals ### 2.8 String Literals
``` ```
<string literal> -> <string literal> ::=
"<opt_string characters>" "<opt_string characters>"
<string chacters> -> <string chacters> ::=
<input character> | <string characters> <input character> <input character> | <string characters> <input character>
``` ```
### 2.9 Separators ### 2.9 Separators
``` ```
<separator> -> one of <separator> ::=
( ) { } , ; " . ( | ) | { | } | , | ; | " |.
``` ```
### 2.10 Operators ### 2.10 Operators
``` ```
<operator> -> <operator> ::=
<arithmetic operator> | <string concatenation operator> <arithmetic operator> | <string concatenation operator>
| <relational operator> | <logical operator> | <relational operator> | <logical operator>
| <assignment operator> | <assignment operator>
<arithmetic operator> -> one of <arithmetic operator> ::=
+ - * / + | - | * | /
<string concatenation operator> -> one of <string concatenation operator> ::=
> < == <> <<
<logical operator> -> <relational operator> ::=
> | < | == | <>
<logical operator> ::=
.AND. | .OR. .AND. | .OR.
<assignment operator> -> <assignment operator> ::=
= =
``` ```
## 3. The PLATYPUS Syntatic Specification ## 3. The PLATYPUS Syntactic Specification
### 3.1 PLATYPUS Program ### 3.1 PLATYPUS Program
``` ```
<program> -> <program> ::=
PLATYPUS {<opt_statements>} SEOF PLATYPUS {<opt_statements>} SEOF
<statements> -> <statements> ::=
<statement> | <statements> <statement> <statement> | <statements> <statement>
``` ```
### 3.2 Statements ### 3.2 Statements
``` ```
<statement> -> <statement> ::=
<assignment statement> <assignment statement>
| <selection statement> | <selection statement>
| <iteration statement> | <iteration statement>
@ -151,59 +156,59 @@
``` ```
### 3.3 Assignment Statement ### 3.3 Assignment Statement
``` ```
<assignment statement> -> <assignment statement> ::=
<assignment expression> <assignment expression> ;
<assignment expression> -> <assignment expression> ::=
AVID = <arithmetic expression> <arithmetic variable identifier> = <arithmetic expression>
| SVID = <string expression> | <string variable identifier> = <string expression>
``` ```
#### 3.2.2 Selection Statement (`if` statement) #### 3.2.2 Selection Statement (`if` statement)
``` ```
<selection statement> -> <selection statement> ::=
IF (<conditional expression>) THEN <statements> IF (<conditional expression>) THEN <opt_statements>
ELSE {<opt_statements>}; ELSE {<opt_statements>};
``` ```
#### 3.2.3 Iteration Statement (the loop statement) #### 3.2.3 Iteration Statement (the loop statement)
``` ```
<iteration statement> -> <iteration statement> ::=
<TBC> USING (<assignment expression> , <conditional expression>, <assignment expression>) REPEAT { <opt_statements> };
``` ```
#### 3.2.4 Input Statement #### 3.2.4 Input Statement
``` ```
<input statement> -> <input statement> ::=
INPUT (<variable list>); INPUT (<variable list>);
<variable list> -> <variable list> ::=
<variable identifier> | <variable list>,<variable identifier> <variable identifier> | <variable list>,<variable identifier>
``` ```
#### 3.2.5 Output Statement #### 3.2.5 Output Statement
``` ```
<output statement> -> <output statement> ::=
<TBC> OUTPUT(<opt_variable list> | <opt_string literal>);
``` ```
### 3.3 Expressions ### 3.3 Expressions
#### 3.3.1 Arithmetic Expressions #### 3.3.1 Arithmetic Expressions
``` ```
<arithmetic expression> -> <arithmetic expression> ::=
<unary arithmetic expression> <unary arithmetic expression>
| <additive arithmetic expression> | <additive arithmetic expression>
<unary arithmetic expression> -> <unary arithmetic expression> ::=
- <primary arithmetic expression> - <primary arithmetic expression>
| + <primary arithmetic expression | + <primary arithmetic expression
<additive arithmetic expression> -> <additive arithmetic expression> ::=
<additive arithmetic expression> + <multiplicative arithmetic expression> <additive arithmetic expression> + <multiplicative arithmetic expression>
| <additive arithmetic expression> - <multiplicative arithmetic expression> | <additive arithmetic expression> - <multiplicative arithmetic expression>
| <multiplicative arithmetic expression> | <multiplicative arithmetic expression>
<multiplicative arithmetic expression> -> <multiplicative arithmetic expression> ::=
<multiplicative arithmetic expression> * <primary arithmetic expression> <multiplicative arithmetic expression> * <primary arithmetic expression>
| <multiplicative arithmetic expression> / <primary arithmetic expression> | <multiplicative arithmetic expression> / <primary arithmetic expression>
| <primary arithmetic expression> | <primary arithmetic expression>
<primary arithmetic expression> -> <primary arithmetic expression> ::=
<variable identifier> <variable identifier>
| <floating-point literal> | <floating-point literal>
| <integer literal> | <integer literal>
@ -211,42 +216,42 @@
``` ```
#### 3.3.2 String Expression #### 3.3.2 String Expression
``` ```
<string expression> -> <string expression> ::=
<primary string expression> <primary string expression>
| <string expression> << <primary string expression> | <string expression> << <primary string expression>
<primary string expression> -> <primary string expression> ::=
<string variable identifier> <string variable identifier>
| <string literal> | <string literal>
``` ```
#### 3.3.3 Conditional Expression #### 3.3.3 Conditional Expression
``` ```
<conditional expression> -> // BNF from C specification adapted to PLATYPUS
<logical OR expression> // source: https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of%20C%20in%20Backus-Naur%20form.htm
<conditional expression> ::=
<logical OR expression>
<logical OR expression> -> <logical OR expression> ::=
<TBC> <logical AND expression>
| <logical OR expression> .OR. <logical AND expression>
<logical AND expression> -> <logical AND expression> ::=
<TBC> <relational expression>
| <logical AND expression> .AND. <relational expression>
// END BNF from C specification
``` ```
#### 3.3.4 Relational Expression #### 3.3.4 Relational Expression
``` ```
<relational expression> -> <relational expression> ::=
<primary a_relational expression> == <primary a_relational expression> <primary a_relational expression> <relational operator> <primary a_relational expression>
| <primary a_relational expression> <= <primary a_relational expression> | <primary s_relational expression> <relational operator> <primary s_relational expression>
| <primary a_relational expression> > <primary a_relational expression>
| <primary a_relational expression> < <primary a_relational expression>
| <primary s_relational expression> == <primary s_relational expression>
| <primary s_relational expression> <= <primary s_relational expression>
| <primary s_relational expression> > <primary s_relational expression>
| <primary s_relational expression> < <primary s_relational expression>
<primary a_relational expression> -> <primary a_relational expression> ::=
<floating-point literal> <floating-point literal>
| <integer literal> | <integer literal>
| <variable identifier> | <variable identifier>
<primary s_relational expression> -> <primary s_relational expression> ::=
<TBC> <string literal>
| <string variable identifier>
``` ```

28
buffer/buffer.sln Normal file
View File

@ -0,0 +1,28 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "buffer", "buffer\buffer.vcxproj", "{034E0E4B-DAFA-45D4-882B-1815AC73DA9E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{034E0E4B-DAFA-45D4-882B-1815AC73DA9E}.Debug|x64.ActiveCfg = Debug|x64
{034E0E4B-DAFA-45D4-882B-1815AC73DA9E}.Debug|x64.Build.0 = Debug|x64
{034E0E4B-DAFA-45D4-882B-1815AC73DA9E}.Debug|x86.ActiveCfg = Debug|Win32
{034E0E4B-DAFA-45D4-882B-1815AC73DA9E}.Debug|x86.Build.0 = Debug|Win32
{034E0E4B-DAFA-45D4-882B-1815AC73DA9E}.Release|x64.ActiveCfg = Release|x64
{034E0E4B-DAFA-45D4-882B-1815AC73DA9E}.Release|x64.Build.0 = Release|x64
{034E0E4B-DAFA-45D4-882B-1815AC73DA9E}.Release|x86.ActiveCfg = Release|Win32
{034E0E4B-DAFA-45D4-882B-1815AC73DA9E}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal