Transitiontable溢出,自动机太大
Transition table overflow, automaton is too big
我想将 structured references with Excel tables 的支持添加到我的 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
来解析结构化引用。
| 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
从 let lex_structref
中删除 | lex_Column'
进行了编译。
有没有我写错的地方,或者是因为我以前的词法分析器和解析器(工作正常)已经很大并且添加一些东西会爆炸吗?我该如何诊断?
除了有助于优化词法分析器的注释之外,还有一个解决方法:ocamllex -ml
不限制状态、转换的数量,table 大小。在没有其他选择的情况下使用它。
我想将 structured references with Excel tables 的支持添加到我的 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
来解析结构化引用。
| 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
从 let lex_structref
中删除 | lex_Column'
进行了编译。
有没有我写错的地方,或者是因为我以前的词法分析器和解析器(工作正常)已经很大并且添加一些东西会爆炸吗?我该如何诊断?
除了有助于优化词法分析器的注释之外,还有一个解决方法:ocamllex -ml
不限制状态、转换的数量,table 大小。在没有其他选择的情况下使用它。