2022-02-02 21:19:32 +03:00
|
|
|
//go:build example
|
2021-03-06 22:38:08 +03:00
|
|
|
// +build example
|
|
|
|
|
2021-03-06 22:30:32 +03:00
|
|
|
package main
|
|
|
|
|
|
|
|
// Simple lexem stack implementation.
|
|
|
|
|
|
|
|
import "github.com/neonxp/unilex"
|
|
|
|
|
|
|
|
type lexemStack []unilex.Lexem
|
|
|
|
|
|
|
|
func (ls *lexemStack) Head() (l unilex.Lexem) {
|
|
|
|
if len(*ls) == 0 {
|
2022-02-02 21:19:32 +03:00
|
|
|
return unilex.Lexem{Type: unilex.LexEOF}
|
2021-03-06 22:30:32 +03:00
|
|
|
}
|
|
|
|
return (*ls)[len(*ls)-1]
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ls *lexemStack) Push(l unilex.Lexem) {
|
|
|
|
*ls = append(*ls, l)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ls *lexemStack) Pop() (l unilex.Lexem) {
|
|
|
|
if len(*ls) == 0 {
|
2022-02-02 21:19:32 +03:00
|
|
|
return unilex.Lexem{Type: unilex.LexEOF}
|
2021-03-06 22:30:32 +03:00
|
|
|
}
|
|
|
|
*ls, l = (*ls)[:len(*ls)-1], (*ls)[len(*ls)-1]
|
|
|
|
return l
|
|
|
|
}
|