我想在Excel 公式的词法分析器和解析器中添加对带有 Excel 表的结构化引用的支持。
我将以下正则表达式添加到lexer_structref.mll
:
let lex_table_name = "DeptSales"
let lex_column_header = "Sales Amount"
(* EG: =[Sales Amount] *)
let lex_ColumnWOTable = "[" lex_column_header "]"
(* EG: =[Region]:[% Commission] *)
let lex_RangeWOTable = lex_ColumnWOTable ":" lex_ColumnWOTable
(* EG: =DeptSales[Sales Amount] *)
let lex_Column' = lex_table_name lex_ColumnWOTable
let lex_structref = lex_ColumnWOTable | lex_RangeWOTable | lex_Column'
在lexer_e.mll
中,我添加了如下标识符。并将parser_e.mly
调用Parser_structref.mly
which 解析结构化引用。
| lex_structref as r { STRUCTREF r }
但是,编译整个程序给了我以下错误:
741 states, 34313 transitions, table size 141698 bytes
File "frontend/gen/lexer_e.mll":
transition table overflow, automaton is too big
make: *** [frontend/gen/lexer_e.ml] Error 3
| lex_Column'
从中删除let lex_structref
使编译工作。
有什么我写错了,还是因为我以前的词法分析器和解析器(工作正常)已经很大并且添加了一些东西会爆炸?我怎么能诊断呢?