0

我想在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.mlywhich 解析结构化引用。

| 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使编译工作。

有什么我写错了,还是因为我以前的词法分析器和解析器(工作正常)已经很大并且添加了一些东西会爆炸?我怎么能诊断呢?

4

1 回答 1

0

除了有助于优化词法分析器的注释外,还有一个解决方法:ocamllex -ml不限制状态、转换、表大小的数量。当没有其他选择时使用它。

于 2020-08-18T02:28:52.533 回答