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、次のように識別子を追加しました。そして、構造化された参照を解析する 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と、コンパイル作業が行われました。

私が間違って書いていることはありますか、それとも以前のレクサーとパーサー (正常に動作します) がすでに大きく、小さなものを追加すると爆発するためですか? どうすればそれを診断できますか?

4

1 に答える 1