File tree 2 files changed +68
-0
lines changed
2 files changed +68
-0
lines changed Original file line number Diff line number Diff line change 1
1
package ast
2
2
3
+ import (
4
+ "github.com/54L1m/mil-lang/token"
5
+ )
6
+
3
7
type Node interface {
4
8
TokenLiteral () string
5
9
}
@@ -13,3 +17,36 @@ type Expression interface {
13
17
Node
14
18
expressionNode ()
15
19
}
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments