mte/unikernel/duniverse/ocaml-dns/resolvconf/resolvconf_lexer.mll

31 lines
1.1 KiB
OCaml
Raw Normal View History

2025-11-11 02:07:51 +01:00
{
open Resolvconf_state
open Resolvconf_parser
}
let ipv4 = (['0'-'9']+ '.' ['0'-'9']+ '.' ['0'-'9']+ '.' ['0'-'9']+) as contents
let ipv6 = (['0'-'9' 'a'-'f' 'A'-'F' ':']+) as contents
let zone_id = (['0'-'9' 'a'-'z' 'A'-'Z' '.' ]+) as contents
(* inspired by https://github.com/tailhook/resolv-conf/blob/master/src/grammar.rs *)
rule lex = parse
| "nameserver" { SNAMESERVER }
| "options" ([^'\n']*) '\n' { state.lineno <- state.lineno + 1 ; EOL }
| "search" ([^'\n']*) '\n' { state.lineno <- state.lineno + 1 ; EOL }
| "domain" ([^'\n']*) '\n' { state.lineno <- state.lineno + 1 ; EOL }
| "sortlist" ([^'\n']*) '\n' { state.lineno <- state.lineno + 1 ; EOL }
| "lookup" ([^'\n']*) '\n' { state.lineno <- state.lineno + 1 ; EOL }
| "family" ([^'\n']*) '\n' { state.lineno <- state.lineno + 1 ; EOL }
| [' ' '\t']+ { SPACE }
| ipv4 { IPV4 contents }
| ipv6 { IPV6 contents }
| '.' { DOT }
| ':' { COLON }
| '%' { PERCENT }
| [' ' '\t']* ('#' [^'\n']*)? '\n' { state.lineno <- state.lineno + 1 ; EOL }
| [' ' '\t']* (';' [^'\n']*)? '\n' { state.lineno <- state.lineno + 1 ; EOL }
| zone_id { ZONE_ID contents }
| eof { EOF }