示例#1
0
文件: etc.go 项目: JamesLinus/pl0
func phelp(t xc.Token) string {
	if len(t.S()) != 0 {
		return fmt.Sprintf(" %s", t.S())
	}

	return ""
}
示例#2
0
文件: lexer.go 项目: JamesLinus/pl0
func (l *lexer) mustIdent(t xc.Token) (Node, int) {
	b, f := l.scope.lookup(t.Val)
	if b == nil {
		l.report.ErrTok(t, "undeclared identifier %s", t.S())
		return nil, -1
	}

	return b.Node, f
}
示例#3
0
文件: lexer.go 项目: JamesLinus/pl0
func (l *lexer) mustProc(t xc.Token) (Node, int) {
	n, f := l.mustIdent(t)
	if n == nil {
		return nil, -1
	}

	if _, ok := n.(*ProcSpec); !ok {
		l.report.ErrTok(t, "%s is not a procedure", t.S())
		return nil, -1
	}

	return n, f
}
示例#4
0
文件: lexer.go 项目: JamesLinus/pl0
func (l *lexer) mustVar(t xc.Token) (Node, int) {
	n, f := l.mustIdent(t)
	if n == nil {
		return nil, -1
	}

	if _, ok := n.(*Variable); !ok {
		l.report.ErrTok(t, "%s is not a variable", t.S())
		return nil, -1
	}

	return n, f
}
示例#5
0
文件: lexer.go 项目: JamesLinus/pl0
func (l *lexer) mustVarOrConst(t xc.Token) (Node, int) {
	n, f := l.mustIdent(t)
	if n == nil {
		return nil, -1
	}

	switch n.(type) {
	case *Variable, *ConstSpec:
		return n, f
	default:
		l.report.ErrTok(t, "%s is not a constant or a variable", t.S())
		return nil, -1
	}
}