问题描述
我想在我的Excel公式的词法分析器中添加structured references with Excel tables的支持。
我向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
从| lex_Column'
中删除let lex_structref
使编译工作完成。
我写错什么了吗,还是因为我以前的词法分析器和解析器(工作正常)已经很大并且添加了一些东西会爆炸呢?我该如何诊断?
解决方法
除了有助于优化词法分析器的注释之外,还有一种解决方法:ocamllex -ml
不限制状态数,转换数和表大小。在没有其他选择时使用。