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
、次のように識別子を追加しました。そして、構造化された参照を解析する whichparser_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
と、コンパイル作業が行われました。
私が間違って書いていることはありますか、それとも以前のレクサーとパーサー (正常に動作します) がすでに大きく、小さなものを追加すると爆発するためですか? どうすればそれを診断できますか?