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
|
module Parser where
|
||||||
|
|
||||||
|
import Control.Exception
|
||||||
import Lexer (Token (..), TokenType (..) )
|
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
|
data TreeNode = TreeNode { stype :: StmtType, children :: [TreeNode], val :: [Char] } deriving (Show, Eq)
|
||||||
stype :: a -> StmtType
|
|
||||||
children :: a -> [a]
|
|
||||||
|
|
||||||
instance TreeNode StmtType where
|
parseTokens :: [Token] -> [TreeNode]
|
||||||
stype Primary = Primary
|
|
||||||
children Primary = []
|
|
||||||
|
|
||||||
--data PrimaryNode = PrimaryNode { val :: [Char] } deriving (TreeNode)
|
|
||||||
|
|
||||||
parseTokens :: [Token] -> TreeNode
|
|
||||||
parseTokens tt
|
parseTokens tt
|
||||||
| k == Literal = PrimaryNode Primary [] (value t)
|
| k == VariableDeclaration = parseVariableDeclaration tt
|
||||||
| otherwise = TreeNode Parser.Numeric []
|
| otherwise = TreeNode Void [] ""
|
||||||
where t = head tt
|
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