Skip to content

Commit 8a1fe2c

Browse files
committed
start parser
1 parent b00f06d commit 8a1fe2c

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

ast/ast.go

+37
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package ast
22

3+
import (
4+
"github.com/54L1m/mil-lang/token"
5+
)
6+
37
type Node interface {
48
TokenLiteral() string
59
}
@@ -13,3 +17,36 @@ type Expression interface {
1317
Node
1418
expressionNode()
1519
}
20+
21+
type Program struct {
22+
Statements []Statement
23+
}
24+
25+
func (p *Program) TokenLiteral() string {
26+
if len(p.Statements) > 0 {
27+
return p.Statements[0].TokenLiteral()
28+
} else {
29+
return ""
30+
}
31+
}
32+
33+
type Identifier struct {
34+
Token token.Token
35+
Value string
36+
}
37+
38+
func (i *Identifier) expressionNode() {}
39+
func (i *Identifier) TokenLiteral() string {
40+
return i.Token.Literal
41+
}
42+
43+
type LetStatement struct {
44+
Token token.Token
45+
Name *Identifier
46+
Value Expression
47+
}
48+
49+
func (ls *LetStatement) statementNode() {}
50+
func (ls *LetStatement) TokenLiteral() string {
51+
return ls.Token.Literal
52+
}

parser/parser.go

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package parser
2+
3+
import (
4+
"github.com/54L1m/mil-lang/ast"
5+
"github.com/54L1m/mil-lang/lexer"
6+
"github.com/54L1m/mil-lang/token"
7+
)
8+
9+
type Parser struct {
10+
l *lexer.Lexer
11+
12+
curToken token.Token
13+
peekToken token.Token
14+
}
15+
16+
func New(l *lexer.Lexer) *Parser {
17+
p := &Parser{l: l}
18+
19+
p.nextToken()
20+
p.nextToken()
21+
return p
22+
}
23+
24+
func (p *Parser) nextToken() {
25+
p.curToken = p.peekToken
26+
p.peekToken = p.l.NextToken()
27+
}
28+
29+
func (p *Parser) ParseProgram() *ast.Program {
30+
return nil
31+
}

0 commit comments

Comments
 (0)