File: src/frontend.ml (return to index)



Statistics:  
kind coverage
binding 0 / 0 (-%)
sequence 0 / 0 (-%)
for 0 / 0 (-%)
if/then 0 / 0 (-%)
try 0 / 0 (-%)
while 0 / 0 (-%)
match/function 0 / 0 (-%)
kind coverage
class expression 0 / 0 (-%)
class initializer 0 / 0 (-%)
class method 0 / 0 (-%)
class value 0 / 0 (-%)
toplevel expression 0 / 0 (-%)
lazy operator 0 / 0 (-%)



Source:

fold all unfold all
000001| (** Common operations for lexing and parsing *)
000002|  
000003| module Lx = Lexing
000004|  
000005| (*let _ = Parsing.set_trace true*)  (* Uncomment to debug parser *)
000006|  
000007| exception Error of Lexing.position * string
000008|  
000009| (*  parse_with_lexbuf : lexbuf -> (string -> string -> pos -> 'a) -> Ast.ast  *)
000010| let parse_with_lexbuf lexbuf error =
000011|   try
000012|     Parser.chunks Scanner.token lexbuf
000013|   with
000014|   | Failure msg  ->
000015|     error "Failure" msg lexbuf.Lexing.lex_curr_p
000016|   | Parsing.Parse_error  -> 
000017|     error "Parse error" "Syntactically incorrect Lua" lexbuf.Lexing.lex_curr_p
000018|   | End_of_file  -> 
000019|     error "Parse error" "Unexpected end of string" lexbuf.Lexing.lex_curr_p
000020|  
000021| (*  parse_with_filename : string -> Ast.ast  *)
000022| let parse_with_filename fname =
000023|   let in_ch  = open_in fname in
000024|   let lexbuf = Lx.from_channel in_ch in
000025|   let curr_p = lexbuf.Lx.lex_curr_p in
000026|   let ()     = lexbuf.Lx.lex_curr_p <- { curr_p with Lx.pos_fname = fname } in
000027|   let ast    = parse_with_lexbuf lexbuf Error.error in
000028|   let ()     = close_in in_ch in
000029|   ast
000030|  
000031| (*  parse_string_and_label : string -> Ast.ast * Last.last *)
000032| let parse_string_and_label str =
000033|   let lexbuf = Lx.from_string str in
000034|   let ast    = parse_with_lexbuf lexbuf
000035|     (fun m1 m2 pos ->
000036|       raise (Error (pos, m1 ^ " - " ^ m2))) in
000037|   (ast, Label.label_prog None ast) (* No filename available *)
000038|  
000039| (* parse_and_label : string -> Ast.ast * Last.last *)
000040| let parse_and_label fname =
000041|   let ()  = Label.reset() in
000042|   let ast = parse_with_filename fname in
000043|   (ast, Label.label_prog (Some fname) ast)

Legend:
   some code - line containing no point
   some code - line containing only visited points
   some code - line containing only unvisited points
   some code - line containing both visited and unvisited points