fix something

This commit is contained in:
Tan, Kian-ting 2024-02-14 23:19:03 +08:00
parent 950c4e0423
commit 9d32899ca9
4 changed files with 99 additions and 28 deletions

View file

@ -92,10 +92,10 @@ EXPR ::= APPLY | FN | LIST | CONST | VAR | "(" EXPR ")"
APPLY ::= OP EXPR+ | EXPR EXPR+
FN ::= "fn" ARGS R_ARR BODY
ARGS ::= ARG | ARG ARGS
ARG ::= "(" TYPE VAR ")"
CONST ::= FLO | STR | INT
VAR ::= ID
TYPE ::= ID
* ARG ::= "(" TYPE VAR ")"
* CONST ::= FLO | STR | INT
* VAR ::= ID
* TYPE ::= ID
LIST ::= [LIST_INNER]
LIST_INNER ::= EXPR | EXPR SEMICOLON LIST_INNER
```

View file

@ -41,25 +41,34 @@ const tokenizer = p.buildLexer([
[true, /^\d+[.]\d+/g, TokenKind.Flo],
[true, /^\d+/g, TokenKind.Int],
[true, /^[@]/g, TokenKind.At],
[true, /^[_\w][_\d\w]*/g, TokenKind.Id],
[true, /^[_a-zA-Z][_0-9a-zA-Z]*/g, TokenKind.Id],
[true, /^->/g, TokenKind.RArr],
[true, /^[;]/g, TokenKind.SColon],
[true, /^[(]/g, TokenKind.LPar],
[true, /^[)]/g, TokenKind.RPar],
[true, /^\(/g, TokenKind.LPar],
[true, /^\)/g, TokenKind.RPar],
[true, /^[=]/g, TokenKind.Assign],
[true, /^([\+\-\*\/]|[!<>=]=)/g, TokenKind.Op],
[true, /^#[^#]*#/g, TokenKind.Com],
[true, /^[\\]/g, TokenKind.BSlash],
[true, /^\"([^"]|[\\\"])*\"/g, TokenKind.Str],
[true, /^([^\\]+?)/g, TokenKind.LitStr],
[true, /^\s+/g, TokenKind.Space],
[true, /^([^\\]+?)/g, TokenKind.LitStr],
]);
/** ignore spaces ,new lines, and comments */
//const _ = p.opt(p.alt(
// p.tok(TokenKind.Space),
// p.tok(TokenKind.Com),
// )
//);
const _ = p.opt(p.alt(p.tok(TokenKind.Space), p.tok(TokenKind.Com)));
function applyArg(value) {
let type = value[2];
let variable = value[4];
return [type, variable];
}
function applyID(value) {
// extend value to ASTNode
const newNode = {
actualValue: value.text,
...value
};
return newNode;
}
function applyInteger(value) {
// extend value to ASTNode
const newNode = {
@ -85,21 +94,33 @@ function applyString(value) {
}
/** define all the parser sentence */
const CONST = p.rule();
/*const VAR = p.rule<TokenKind, ASTNode>();
const ARG = p.rule<TokenKind, ASTNode>();
const VAR = p.rule();
const TYPE = p.rule();
const ARG = p.rule();
/*
const EXPR = p.rule<TokenKind, AST>();
const LETTING = p.rule<TokenKind, AST>();
const LAMBDA = p.rule<TokenKind, AST>();
const APPLYING = p.rule<TokenKind, AST>(); */
/** ARG ::= "(" TYPE VAR ")" */
ARG.setPattern(p.apply(p.seq(p.tok(TokenKind.LPar), _, TYPE, _, VAR, _, p.tok(TokenKind.RPar)), applyArg));
/** VAR ::= ID */
VAR.setPattern(p.apply(p.tok(TokenKind.Id), applyID));
/** TYPE ::= ID */
TYPE.setPattern(p.apply(p.tok(TokenKind.Id), applyID));
/** * CONST ::= FLO | STR | INT */
CONST.setPattern(p.alt(p.apply(p.tok(TokenKind.Flo), applyFloat), p.apply(p.tok(TokenKind.Int), applyInteger), p.apply(p.tok(TokenKind.Str), applyString)));
// parse the strings
function mainParse(inputStr) {
return p.expectSingleResult(p.expectEOF(CONST.parse(tokenizer.parse(inputStr))));
// ARG.parse(tokenizer.parse(inputStr))));
}
// test
function main() {
assert.strictEqual(mainParse("123").actualValue, 123n);
assert.strictEqual(mainParse("3.14").actualValue, 3.14);
assert.strictEqual(mainParse("\"foo\"").actualValue, "foo");
//assert.strictEqual(astToSExp(mainParse("( int a )")), "(int a)");
}
;
main();

View file

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}

View file

@ -49,30 +49,50 @@ const tokenizer = p.buildLexer([
[true,/^\d+[.]\d+/g , TokenKind.Flo],
[true, /^\d+/g, TokenKind.Int],
[true,/^[@]/g, TokenKind.At ],
[true,/^[_\w][_\d\w]*/g, TokenKind.Id ],
[true,/^[_a-zA-Z][_0-9a-zA-Z]*/g, TokenKind.Id ],
[true,/^->/g , TokenKind.RArr ],
[true, /^[;]/g, TokenKind.SColon ],
[true, /^[(]/g, TokenKind.LPar ],
[true, /^[)]/g, TokenKind.RPar ],
[true, /^\(/g, TokenKind.LPar ],
[true, /^\)/g, TokenKind.RPar ],
[true, /^[=]/g, TokenKind.Assign ],
[true, /^([\+\-\*\/]|[!<>=]=)/g, TokenKind.Op ],
[true, /^#[^#]*#/g, TokenKind.Com ],
[true, /^[\\]/g, TokenKind.BSlash ],
[true,/^\"([^"]|[\\\"])*\"/g , TokenKind.Str ],
[true, /^([^\\]+?)/g, TokenKind.LitStr ],
[true, /^\s+/g, TokenKind.Space],
[true, /^([^\\]+?)/g, TokenKind.LitStr ],
]);
/** ignore spaces ,new lines, and comments */
//const _ = p.opt(p.alt(
// p.tok(TokenKind.Space),
// p.tok(TokenKind.Com),
// )
//);
const _ = p.opt(p.alt(
p.tok(TokenKind.Space),
p.tok(TokenKind.Com),
)
);
function applyArg(value: [p.Token<TokenKind>,
p.Token<TokenKind> | undefined,
ASTNode,
p.Token<TokenKind> | undefined,
ASTNode,
p.Token<TokenKind> | undefined,
p.Token<TokenKind>]): AST[]{
let type = value[2];
let variable = value[4];
return [type, variable];
}
function applyID(value: p.Token<TokenKind.Id>): ASTNode {
// extend value to ASTNode
const newNode : ASTNode = {
actualValue : value.text ,
...value};
return newNode;
}
function applyInteger(value: p.Token<TokenKind.Int>): ASTNode {
// extend value to ASTNode
@ -99,13 +119,40 @@ function applyString(value: p.Token<TokenKind.Str>): ASTNode {
/** define all the parser sentence */
const CONST = p.rule<TokenKind, ASTNode>();
/*const VAR = p.rule<TokenKind, ASTNode>();
const ARG = p.rule<TokenKind, ASTNode>();
const VAR = p.rule<TokenKind, ASTNode>();
const TYPE = p.rule<TokenKind, ASTNode>();
const ARG = p.rule<TokenKind, AST[]>();
/*
const EXPR = p.rule<TokenKind, AST>();
const LETTING = p.rule<TokenKind, AST>();
const LAMBDA = p.rule<TokenKind, AST>();
const APPLYING = p.rule<TokenKind, AST>(); */
/** ARG ::= "(" TYPE VAR ")" */
ARG.setPattern(
p.apply(p.seq(
p.tok(TokenKind.LPar),
_,
TYPE,
_,
VAR,
_,
p.tok(TokenKind.RPar),
),applyArg)
);
/** VAR ::= ID */
VAR.setPattern(
p.apply(p.tok(TokenKind.Id), applyID),
);
/** TYPE ::= ID */
TYPE.setPattern(
p.apply(p.tok(TokenKind.Id), applyID),
);
/** * CONST ::= FLO | STR | INT */
CONST.setPattern(
p.alt(
p.apply(p.tok(TokenKind.Flo), applyFloat),
@ -116,9 +163,11 @@ CONST.setPattern(
);
// parse the strings
function mainParse(inputStr : string){
return p.expectSingleResult(p.expectEOF(
CONST.parse(tokenizer.parse(inputStr))));
// ARG.parse(tokenizer.parse(inputStr))));
}
@ -126,7 +175,8 @@ return p.expectSingleResult(p.expectEOF(
function main(){
assert.strictEqual(<BigInt>mainParse("123").actualValue, 123n);
assert.strictEqual(<BigInt>mainParse("3.14").actualValue, 3.14);
assert.strictEqual(<BigInt>mainParse("\"foo\"").actualValue, "foo");
assert.strictEqual(<BigInt>mainParse("\"foo\"").actualValue, "foo");
//assert.strictEqual(astToSExp(mainParse("( int a )")), "(int a)");
};