modified: app/Parser.hs

deleted:    docs/grammar.md
	deleted:    pascal/arr.pas
	deleted:    pascal/modifiers.pas
	deleted:    pascal/reserved_words.pas
	deleted:    pascal/test.pas
	deleted:    pascal/test1.pas
This commit is contained in:
Michael Wain 2024-11-07 02:10:19 +03:00
parent 36730daf71
commit cda162f77d
7 changed files with 12 additions and 196 deletions

View File

@ -1,22 +1,19 @@
module Parser where
import Control.Exception
import Lexer (Token (..), TokenType (..) )
data StmtType = Primary | Numeric deriving (Show, Eq)
data StmtType = Void | VariableDeclaration | AssignmentExpression | BinaryExpression deriving (Show, Eq)
class (Show a) => TreeNode a where
stype :: a -> StmtType
children :: a -> [a]
data TreeNode = TreeNode { stype :: StmtType, children :: [TreeNode], val :: [Char] } deriving (Show, Eq)
instance TreeNode StmtType where
stype Primary = Primary
children Primary = []
--data PrimaryNode = PrimaryNode { val :: [Char] } deriving (TreeNode)
parseTokens :: [Token] -> TreeNode
parseTokens tt
| k == Literal = PrimaryNode Primary [] (value t)
| otherwise = TreeNode Parser.Numeric []
parseTokens :: [Token] -> [TreeNode]
parseTokens tt
| k == VariableDeclaration = parseVariableDeclaration tt
| otherwise = TreeNode Void [] ""
where t = head tt
k = token_type t
k = token_type t
-- Keyword(var) Literal Colon Literal Assignment (Expression) EndStatement
parseVariableDeclaration :: [Token] -> TreeNode
parseVariableDeclaration tt =

View File

@ -1,5 +0,0 @@
$$
[\text{halt}] \to halt([\text{expression}]);
\\
[\text{expression}] \to \text{Number}
$$

View File

@ -1,20 +0,0 @@
[
Token {value = "halt", token_type = Literal},
Token {value = "(", token_type = OpenParen},
Token {value = "2", token_type = Number},
Token {value = "+", token_type = BinaryOperator},
Token {value = "3", token_type = Number},
Token {value = ")", token_type = CloseParen},
Token {value = ";", token_type = EndStatement}
]
[
TreeNode {name = HaltNode, children = [
TreeNode {name = Constant, children = [], node_val = "2"}
], node_val = ""},
TreeNode {name = Void, children = [
Token {value = ")", token_type = CloseParen},
Token {value = ";", token_type = EndStatement}
]
[], node_val = ""}]

View File

@ -1,61 +0,0 @@
absolute
abstract
alias
assembler
bitpacked
break
cdecl
continue
cppdecl
cvar
default
deprecated
dynamic
enumerator
experimental
export
external
far
far16
forward
generic
helper
implements
index
interrupt
iocheck
local
message
name
near
nodefault
noreturn
nostackframe
oldfpccall
otherwise
overload
override
pascal
platform
private
protected
public
published
read
register
reintroduce
result
safecall
saveregisters
softfloat
specialize
static
stdcall
stored
strict
unaligned
unimplemented
varargs
virtual
winapi
write

View File

@ -1,53 +0,0 @@
absolute
and
array
asm
begin
case
const
constructor
destructor
div
do
downto
else
end
file
for
function
goto
if
implementation
in
inherited
inline
interface
label
mod
nil
not
object
of
operator
or
packed
procedure
program
record
reintroduce
repeat
self
set
shl
shr
string
then
to
type
unit
until
uses
var
while
with
xor

View File

@ -1 +0,0 @@
halt(2 + 3);

View File

@ -1,41 +0,0 @@
program InsertionSort;
Var x: Integer;
Var numbers : array[1..5] of Integer;
procedure InsertionSort(size : Integer );
Var i, j, index : Integer;
Begin
For i := 2 to size do
Begin
index := numbers[i];
j := i;
While ((j > 1) AND (numbers[j-1] > index)) do
Begin
numbers[j] := numbers[j-1];
j := j - 1;
End;
numbers[j] := index;
End;
End;
Begin
writeln('Insertion Example: ');
numbers[1] := 9001;
numbers[2] := 42;
numbers[3] := 32;
numbers[4] := 64;
numbers[5] := 2;
for x:= 0 to 5 do
writeln('unsorted[', x, '] = ', numbers[x] );
InsertionSort(5);
writeln('=== sorted ===');
for x:= 0 to 5 do
writeln('sorted[', x, '] = ', numbers[x] );
End.