package p4spectec

  1. Overview
  2. Docs
P4-SpecTec: A mechanization toolchain for the P4 Programming Language

Install

dune-project
 Dependency

Authors

Maintainers

Sources

v0.1.2.tar.gz
md5=1a3bc0a385fe1ecf403c019f49aa6de6
sha512=5d20b5821f33e2a3a5419b208606f27c01511994c2b3b1e1cdf4c077056dfd0aa81682af0720e1060ee2bfb0341918fcc4c53159820205a2bc32b725e5c1a714

doc/src/p4/parse.ml.html

Source file parse.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
module Value = Runtime.Value
open Util.Error

let error = error_parse
let error_no_region = error_parse_no_region

let preprocess (includes : string list) (path : string) =
  try Preprocessor.preprocess includes path
  with _ -> "preprocessor error" |> error_no_region

let lex (path : string) (file : string) =
  try
    let () = Lexer.reset () in
    let lexbuf = Lexing.from_string file in
    let () = Lexing.set_filename lexbuf path in
    lexbuf
  with Lexer.Error s -> Format.asprintf "lexer error: %s" s |> error_no_region

let parse (lexbuf : Lexing.lexbuf) : Value.t =
  try Parser.p4program Lexer.lexer lexbuf with
  | Lexer.Error s ->
      let at = Lexer.at lexbuf in
      let msg = Format.asprintf "lexer error: %s" s in
      error at msg
  | Parser.Error ->
      let at = Lexer.at lexbuf in
      let msg = Format.asprintf "syntax error" in
      error at msg
  | e -> raise e

let parse_string (path : string) (str : string) : Value.t =
  (* Assume str is preprocessed *)
  let tokens = lex path str in
  parse tokens

let parse_file (includes : string list) (path : string) : Value.t =
  let program = preprocess includes path in
  parse_string path program

let parse_file_fresh (includes : string list) (path : string) : Value.t =
  Value.Fresh_.refresh ();
  parse_file includes path