blob: b5b3470e67594337d0d4543c71d749a40085d8aa [file] [log] [blame]
Fumitoshi Ukai119dc912015-03-30 16:52:41 +09001package main
2
Fumitoshi Ukai119dc912015-03-30 16:52:41 +09003type AST interface {
Fumitoshi Ukaie34c1792015-03-30 17:53:47 +09004 eval(*Evaluator)
Fumitoshi Ukai119dc912015-03-30 16:52:41 +09005 show()
6}
7
8type ASTBase struct {
9 lineno int
10}
11
12type AssignAST struct {
13 ASTBase
14 lhs string
15 rhs string
16}
17
Fumitoshi Ukaie34c1792015-03-30 17:53:47 +090018func (ast *AssignAST) eval(ev *Evaluator) {
19 ev.evalAssign(ast)
Fumitoshi Ukai119dc912015-03-30 16:52:41 +090020}
21
22func (ast *AssignAST) show() {
23 Log("%s=%s", ast.lhs, ast.rhs)
24}
25
26type RuleAST struct {
27 ASTBase
28 lhs string
29 rhs string
30 cmds []string
31}
32
Fumitoshi Ukaie34c1792015-03-30 17:53:47 +090033func (ast *RuleAST) eval(ev *Evaluator) {
34 ev.evalRule(ast)
Fumitoshi Ukai119dc912015-03-30 16:52:41 +090035}
36
37func (ast *RuleAST) show() {
38 Log("%s: %s", ast.lhs, ast.rhs)
39 for _, cmd := range ast.cmds {
40 Log("\t%s", cmd)
41 }
42}