私のロープの最後です。私はocamllexで働くことが何もできません、そして、それはナッツを運転しています。ここでOCaml lex:まったく動作しません。
{
open Parser
}
rule next = parse
| (['a'-'z'] ['a'-'z']*) as id { Identifier id }
| '=' { EqualsSign }
| ';' { Semicolon }
| '\n' | ' ' { next lexbuf }
| eof { EOF }
は、私が入力として渡すファイルの内容は次のとおりです:
a=b;
しかし、私は事をコンパイルして実行すると、私は非常にエラーが出るこれは私の.mll
ファイルです最初の文字は、それが有効でないと言っています。私は正直に何が起こっているのか分かりませんし、Googleは私を助けてくれていません。どのようにこれを可能にすることができますか?ご覧のとおり、私は本当にここで困惑しています。
EDIT:
私はパーサをあきらめたことをあまりにも長い間働いていました。これは私のメインファイル内の関連コードです:
let parse_file filename =
let l = Lexing.from_channel (open_in filename) in
try
Lexer.next l;()
with
| Failure msg ->
printf "line: %d, col: %d\n" l.lex_curr_p.pos_lnum l.lex_curr_p.pos_cnum
"行:1、col:1"を印刷します。
識別子のようなコンストラクタを定義したMLファイルを提供できますか?また、コンパイル時にocamllexとocamlcが苦情を申し立てていないことを確認できましたか? – Surikator
これらはparser.mlyで標準として定義されており、どちらも不平を言いません。 – marsolk
@marsolk:私は不思議です - あなたはこれを理解しましたか?なにが問題だったの? – lebowski