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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
{
open Lexing;;
open Printf;;
let print_char_repr c =
match c with
| '\'' -> printf "{\\textquotesingle}"
| '`' -> printf "{\\textasciigrave}"
| _ -> printf "{\\char%d}" (int_of_char c);
;;
}
rule main = parse
"\\begin{syntax}" {
print_string "\\begin{syntax}";
syntax lexbuf }
| "\\begin{verbatim}" | "\\begin{camlexample}" as s {
print_string s;
verbatim lexbuf }
| "\\@" {
print_string "@";
main lexbuf }
| "@" {
print_string "\\synt{";
syntax lexbuf }
| _ {
print_char (lexeme_char lexbuf 0); main lexbuf }
| eof {
() }
and syntax = parse
"\\end{syntax}" {
print_string "\\end{syntax}";
main lexbuf }
| "@" {
print_string "}";
main lexbuf }
| '\'' {
print_string "\\token{";
inquote lexbuf }
| '\"' {
print_string "\\token{";
indoublequote lexbuf }
| "epsilon" { print_string "\\emptystring"; syntax lexbuf }
| ['a'-'z' 'A'-'Z'] ['a'-'z' 'A'-'Z' '0'-'9' '-'] * as lxm {
print_string "\\nonterm{";
print_string lxm ;
print_string"}";
syntax lexbuf }
| '@' (['a'-'z' 'A'-'Z'] ['a'-'z' 'A'-'Z' '0'-'9' '-'] * as lxm) '@' {
print_string "\\nt{";
print_string lxm ;
print_string"}";
syntax lexbuf }
| '\\' ['a'-'z''A'-'Z'] + {
print_string (lexeme lexbuf);
syntax lexbuf }
| ['_' '^'] _ {
print_string (lexeme lexbuf);
syntax lexbuf }
| "{" { print_string "\\brepet{}"; syntax lexbuf }
| "}" { print_string "\\erepet{}"; syntax lexbuf }
| "{{" { print_string "\\brepets{}"; syntax lexbuf }
| "}}" { print_string "\\erepets{}"; syntax lexbuf }
| "[" { print_string "\\boption{}"; syntax lexbuf }
| "]" { print_string "\\eoption{}"; syntax lexbuf }
| "(" { print_string "\\bparen{}"; syntax lexbuf }
| ")" { print_string "\\eparen{}"; syntax lexbuf }
| "||" { print_string "\\orelse{}"; syntax lexbuf }
| ":" { print_string "\\is{}"; syntax lexbuf }
| "|" { print_string "\\alt{}"; syntax lexbuf }
| ";" { print_string "\\sep{}"; syntax lexbuf }
| "\\\\" { print_string "\\cutline{}"; syntax lexbuf }
| _ {
print_char (lexeme_char lexbuf 0);
syntax lexbuf }
and inquote = parse
['A'-'Z' 'a'-'z' '0'-'9'] {
print_char (lexeme_char lexbuf 0);
inquote lexbuf }
| '\'' {
print_string "}";
syntax lexbuf }
| ['\128' - '\255'] {
print_char (lexeme_char lexbuf 0);
inquote lexbuf
}
| _ {
print_char_repr (lexeme_char lexbuf 0);
inquote lexbuf }
and indoublequote = parse
['A'-'Z' 'a'-'z' '0'-'9'] {
print_char (lexeme_char lexbuf 0);
indoublequote lexbuf }
| '"' {
print_string "}";
syntax lexbuf }
| ['\128' - '\255'] {
print_char (lexeme_char lexbuf 0);
indoublequote lexbuf
}
| _ {
print_char_repr (lexeme_char lexbuf 0);
indoublequote lexbuf }
and verbatim = parse
"\n\\end{verbatim}"|"\\end{camlexample}" as s {
print_string s;
main lexbuf }
| _ {
print_char (lexeme_char lexbuf 0);
verbatim lexbuf }
|