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:
parent
36730daf71
commit
cda162f77d
@ -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 =
|
@ -1,5 +0,0 @@
|
||||
$$
|
||||
[\text{halt}] \to halt([\text{expression}]);
|
||||
\\
|
||||
[\text{expression}] \to \text{Number}
|
||||
$$
|
@ -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 = ""}]
|
@ -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
|
@ -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
|
@ -1 +0,0 @@
|
||||
halt(2 + 3);
|
@ -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.
|
Loading…
x
Reference in New Issue
Block a user