lexer有一些內部屬性在特定情況下有用:
* `lexer.lexpos`。這是一個表示當前分析點的位置的整型值。如果你修改這個值的話,這會改變下一個token()的調用行為。在標記的規則方法里面,這個值表示緊跟匹配字串后面的第一個字符的位置,如果這個值在規則中修改,下一個返回的標記將從新的位置開始匹配
* `lexer.lineno`。表示當前行號。PLY只是聲明這個屬性的存在,卻永遠不更新這個值。如果你想要跟蹤行號的話,你需要自己添加代碼( 4.6 行號和位置信息)
* `lexer.lexdata`。當前lexer的輸入字串,這個字符串就是input()方法的輸入字串,更改它可能是個糟糕的做法,除非你知道自己在干什么。
* `lexer.lexmatch`。PLY內部調用Python的re.match()方法得到的當前標記的原始的Match對象,該對象被保存在這個屬性中。如果你的正則式中包含分組的話,你可以通過這個對象獲得這些分組的值。注意:這個屬性只在有標記規則定義的方法中才有效。
- 0 一些翻譯約定
- 1 前言和預備
- 2 介紹
- 3 PLY概要
- 4 Lex
- 4.1 Lex的例子
- 4.2 標記列表
- 4.3 標記的規則
- 4.4 標記的值
- 4.5 丟棄標記
- 4.6 行號和位置信息
- 4.7 忽略字符
- 4.8 字面字符
- 4.9 錯誤處理
- 4.10 構建和使用lexer
- 4.11 @TOKEN裝飾器
- 4.12 優化模式
- 4.13 調試
- 4.14 其他方式定義詞法規則
- 4.15 額外狀態維護
- 4.16 Lexer克隆
- 4.17 Lexer的內部狀態
- 4.18 基于條件的掃描和啟動條件
- 4.19 其他問題
- 5 語法分析基礎
- 6 Yacc
- 6.1 一個例子
- 6.2 將語法規則合并
- 6.3 字面字符
- 6.4 空產生式
- 6.5 改變起始符號
- 6.6 處理二義文法
- 6.7 parser.out調試文件
- 6.8 處理語法錯誤
- 6.9 行號和位置的跟蹤
- 6.10 構造抽象語法樹
- 6.11 嵌入式動作
- 6.12 Yacc的其他
- 7 多個語法和詞法分析器
- 8 使用Python的優化模式
- 9 高級調試
- 9.1 調試lex()和yacc()命令
- 9.2 運行時調試
- 10 如何繼續