lark-parser / lark

Lark is a parsing toolkit for Python, built with a focus on ergonomics, performance and modularity.
MIT License
4.62k stars 395 forks source link

No such file or directory: 'COMMON.lark' #1421

Closed raeldor closed 3 weeks ago

raeldor commented 3 weeks ago

Works find on my local machine (Windows), but on deploy on server (Amazon Linux 2023), I keep getting this error.

  File "/opt/cnds-jobs/data-mart-push/venv/lib64/python3.9/site-packages/lark/load_grammar.py", line 1255, in load_grammar
    self.do_import(dotted_path, base_path, aliases, mangle)
  File "/opt/cnds-jobs/data-mart-push/venv/lib64/python3.9/site-packages/lark/load_grammar.py", line 1338, in do_import
    open(grammar_path, encoding='utf8')
FileNotFoundError: [Errno 2] No such file or directory: 'COMMON.lark'

If I go into the site-packages and copy the file 'common.lark' to 'COMMON.lark' it works. Does this mean the grammar loading code does not cater for operating systems that have case dependent file names?

MegaIng commented 3 weeks ago

What exactly are you doing to trigger this error and why do you think it should work?

raeldor commented 3 weeks ago

It triggers simply on this call, but only when run on Amazon Linux...

    mdx_parser = Lark(r"""
                      select : "SELECT" set_list axis "," set_list axis from_clause where_clause 

                      UNQUOTED_STRING : (DIGIT|LETTER|" ")+

                      element : "[" UNQUOTED_STRING "].[" UNQUOTED_STRING "].[" UNQUOTED_STRING "]"
                      dimension : "[" UNQUOTED_STRING "].[" UNQUOTED_STRING "]"
                      cube : "[" UNQUOTED_STRING "]"
                      element_list : [element ("," element)*]
                      tm1subset : "TM1SubsetToSet(" dimension "," ESCAPED_STRING "," ESCAPED_STRING ")"
                      tm1set : "{" element_list "}" | "{" tm1subset "}"
                      set_clause : "NON EMPTY" tm1set | tm1set
                      set_list : [set_clause ("*" set_clause)*]
                      axis : "ON" SIGNED_NUMBER
                      from_clause : "FROM" cube -> from_clause
                      where_clause : "WHERE" "(" element_list ")" -> where_clause

                      %import common.ESCAPED_STRING
                      %import common.WORD
                      %import common.DIGIT
                      %import common.LETTER
                      %import common.SIGNED_NUMBER
                      %import COMMON.WS
                      %ignore WS
                      """, start='select')
erezsh commented 3 weeks ago
%import COMMON.WS

common should be lowercase

raeldor commented 3 weeks ago
%import COMMON.WS

common should be lowercase

Yikes. I'm embarrassed for mising that. Thank you!