Documentation ¶
Overview ¶
Package lex 实现了词法分析器
对于大多数使用者, Lex 是唯一一个使用的函数
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var (
TokenStrMap = [...]string{
No: "no (没有表示)",
NAME: "name (符号)",
ASSIGN: "assign (赋值)",
VAR: "var (变量声明)",
FUNC: "func (函数声明)",
ADD: "add (加号)",
SUB: "sub (减号)",
MUL: "mul (乘号)",
DIV: "dlv (除号)",
LBRACE: "lbrace (左大括号)",
RBRACE: "rbrace (右大括号)",
NUMBER: "number (数字)",
FLOAT: "float (浮点数)",
NoEqual: "no equal (不相等)",
Equal: "equal (相等)",
Less: "less (小于)",
Greater: "greater (大于)",
TRUE: "true",
FALSE: "false",
IF: "if",
ELSE: "else",
FOR: "for",
Break: "break",
Continue: "continue",
Struct: "struct",
Interface: "interface",
LEA: "lea (取地址)",
OnlyLEA: "onlylea (&)",
MLCStart: "multiline comment start (多行注释开头)",
MLCEnd: "multiline comment end (多行注释结束)",
MLCIn: "multiline comment in (多行注释之间)",
String: "string (字符串)",
SEMICOLON: "semicolon(分号)",
Return: "return (返回)",
LPAREN: "lparen (左小括号)",
RPAREN: "rparen (右小括号)",
Comma: "comma (逗号)",
GOTO: "goto",
Colon: "colon (冒号)",
Remain: "remainder (取余数)",
Deref: "dereference (解引用)",
OnlyDeref: "OnlyDeref (@)",
Const: "const (常量)",
Inc: "Increment (自增)",
Dec: "Decrement (自减)",
Nil: "nil (指针的零值)",
Package: "package (包声明)",
Switch: "switch",
Case: "case",
Default: "default",
Method: "method (方法)",
AutoFree: "autofree (自动释放块)",
SinLineComments: "Single-Line Comments (单行注释)",
AND: "AND (位与运算)",
Or: "Or (位或运算)",
Xor: "Xor (异或运算)",
LogicAND: "logic and (逻辑与)",
LogicOr: "logic or (逻辑或)",
Import: "import (导入)",
Enum: "enum (枚举)",
TokenWithBrackets: "TokenWithBrackets (带中括号的Token)",
MoreThanJustTokensWithBrackts: "MoreThanJustTokensWithBrackts (不止有中括号的Token)",
}
)
Functions ¶
This section is empty.
Types ¶
type FileToken ¶
一个文件的词法分析结果
func Lex ¶
func Lex(file string, value []string, errctx *errcode.ErrCtx, EnableSinLineComments bool) *FileToken
Lex 进行词法分析
- file是文件名
- value是已经分好行的待识别代码,必须已经去除换行符
- errctx是错误处理上下文
- EnableSinLineComments 是否启用多行注释,除非为了格式化文件,否则应该为false
func Lex2 ¶
func Lex2(file string, value *bufio.Reader, errctx *errcode.ErrCtx, EnableSinLineComments bool) *FileToken
Lex2 进行词法分析
- file是文件名
- value是待分析代码
- errctx是错误处理上下文
- EnableSinLineComments 是否启用多行注释,除非为了格式化文件,否则应该为false
type MoreThanJustTokensWithBracktsS ¶
type MoreThanJustTokensWithBracktsS struct {
Ptr *[]Token
}
MoreThanJustTokensWithBracktsS 不止有中括号的Token结构体
type Scan ¶
type Scan struct { ScanConfig // contains filtered or unexported fields }
Scan 一行扫描器 分析一行的词法单元
func NewScan ¶
func NewScan(s string, cf ScanConfig) Scan
NewScan 创建Scan
- s要进行分析的一行字符串,必须已经去除换行符
- cf是一些非必须的参数
type ScanConfig ¶
type Token ¶
Token 单词标记 代表一个最小词法单元
func NewMoreThanJustTokensWithBrackts ¶
NewMoreThanJustTokensWithBrackts 创建不止有中括号的Token
func (*Token) PtrMoreThanJustTokensWithBracktsS ¶
func (t *Token) PtrMoreThanJustTokensWithBracktsS() *MoreThanJustTokensWithBracktsS
PtrMoreThanJustTokensWithBracktsS 将 Token 的Value字段解释为 MoreThanJustTokensWithBracktsS 并返回指针
type TokenType ¶
type TokenType int
标记类型
const ( No TokenType = iota NAME ASSIGN VAR FUNC ADD SUB MUL DIV LBRACE RBRACE NUMBER FLOAT NoEqual Equal Less Greater TRUE FALSE IF ELSE FOR Break Continue Struct Interface LEA OnlyLEA MLCStart //multiline comment MLCEnd MLCIn String SEMICOLON //semicolon分号 Return LPAREN //Left parenthesis RPAREN //right parenthesis Comma GOTO Colon Remain Deref //dereference OnlyDeref Const Inc //Increment Dec //Decrement Nil Package Switch Case Default Method AutoFree SinLineComments //Single-Line Comments AND Or Xor LogicAND LogicOr Import Enum TokenWithBrackets MoreThanJustTokensWithBrackts //More than just tokens with brackets )
Click to show internal directories.
Click to hide internal directories.