問題タブ [ocamllex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ocaml - 複数のレクサーに同じ ident 定義を共有させることは可能ですか?
私はいくつかのレクサーを持っています: lexer_1.mll
, lexer_2.mll
, ...
ident
( )の一部の定義let ident = regexp
は共通であり、これらのファイルで繰り返されます。たとえば、INTEGER
、FLOAT
、 ...の定義
.mll
それらをどこかで一度だけ定義して、ファイルにそれを呼び出させることが可能かどうかを誰かが知っていますか?
parsing - .mly と .mll を分けてパースの一部を取り出す
ファイルのセットを解析するフロントエンドをtxt
作成しています。各ファイルには一連の が含まれていprocedures
ます。たとえば、1 つの txt ファイルは次のようになります。
syntax.ml
内容:
parser.mly
次のようになります。
procedure_declaration
ここで、 (例外処理の目的で)の解析を取得したいと思います。つまり、 and を作成parser_pd.mly
しlexer_pd.mll
、parser.mly
callを呼び出しますparser_pd.main
。したがって、parser_pd.mly
次のようになります。
以前のコンテンツのほとんどはparser.mly
に移動する必要があるためparser_pd.mly
、parser.mly
以前よりもはるかに軽くなり、次のようになります。
??????
問題は、その部分の書き方がわからないことであり、lexer.mll
どちらが軽くなければならないかということです ( token END
、SUB
andのみを読み取り、EOS
によって処理されるコンテンツを許可するためlexer_pd.mll
)。おそらく、Lexing
モジュールのいくつかの機能が必要ですか?
私の質問が明確であることを願っています...誰か助けてくれますか?
parsing - トークンを含むテーブルを .mly と .mll の両方で見えるようにする
keyword_table
いくつかの文字列をいくつかのトークンにマップする を定義したいと思います。また、このテーブルを と の両方parser.mly
で表示できるようにしたいと考えていますlexer.mll
。
でテーブルを定義する必要があるようですparser.mly
。
lexer.mll
ただし、たとえば、では使用できませんでした
誰が問題がどこにあるのか教えてもらえますか? parser.mly
と の両方でデータを可視化することはできませんlexer.mll
か?
ocaml - ocamllex で式の一部のみを文字列に一致させる方法
ルールセクションが次のように見える単純な ocamllex プログラムがあります-
私の質問は、「Inc of var of int」である抽象構文に変換できるように、Inc(X(7)) と一致させたいとします。Inc(X(7)) の読み取り中にレクサーに個別の文字列を提供してもらいたいので、「Inc」を差分文字列 (inb など) として取得し、その後に「X」を差分文字列 (inc など) n として取得します。 "7" を diff 文字列 (ind など) として使用すると、プログラムで指定されているように、文字列 ine 全体に固執する代わりに、これらの文字列 inb、inc、および ind をいじることができます。これについてどうすればいいですか?私の質問が明確であることを願っています
ocaml - OCamllex で StringMap を使用する
リストから単語の文字列マップを作成する OCamllex パーサーを作成しようとしています。ただし、ヘッダーで StringMap モジュールを開こうとすると、「Unbounded module」エラーが表示されます。
モジュールを明示的に開かずにトレーラー内でマップを作成しようとすると、同じエラーが発生します。
すべての OCaml チュートリアルは、私が正しい構文を使用していることを示唆しています。おそらく私は OCamllex(?) を誤用しているのかもしれませんが、ヘッダー、ルール、およびトレーラーの範囲が明確ではありません。ドキュメントで解決策を探しましたが、OCamllex を対象としたチュートリアルはほとんどありません。私が間違っていることを推測できる人はいますか?OCamllex では StringMap モジュールを使用できますか?
compiler-construction - Ocaml のエラー E
Ocamlでクラスのコンパイラをやっています。「1」のようなコマンドまたは式を含むファイルを読み取る必要があり、Int 1 が返されます。同じコードが、私と友人以外のクラス全体で機能しました。誰もが同じバージョンの ocaml と Ubuntu 13.04 を使用しています。エラー: Lexico.Eof
誰かがこれが何であるかについて何か考えがありますか? これは asa.ml です:
これは Sintatico.mly です。
Lexico.mll:
carregatudo.ml という名前のファイルを呼び出すコードは次のとおりです。
ポルトガル語について申し訳ありません:
arquivoはファイルを意味します
Lexico はレクサーを意味します。
Sintatico はパーサーを意味します
最初に、コマンド make interpretador を使用してこの makefile を実行します。
次に carregatudo.ml: #use "carregatudo.ml";;
次の関数: analisa_arquivo("teste.pt");;
入力ファイル teste.pt は次のようになります。
そしてリターンは
しかし、私はエラー Lexico.Eof を取得し続けます
ありがとうございました!
ocaml - OCamllex: 正規表現
現在、私は Ocaml でインタプリタを書こうとしていますが、これは私の lexer.mll です:
なぜ ocamllex が { FILE_NAME lxm } 行でエラーを表示するのか、私は本当に混乱しています。レクサーの先頭に置く#load "str.cma"
と、その行にエラー構文エラーが出力されます。
なんで?私はかなり混乱しています...
編集
する必要があります[ [^\\]*\.(\w+)$ ] as lxm { FILE_NAME lxm }
しかし、問題はまだ解決されていません...
ocaml - OCaml Interpreter: インタープリターがファイル内の 1 行しか実行しない理由
パーサーとレクサーをコンパイルするために、ocamlyacc と ocamllex を使用してインタープリターを作成しています。
私の問題は、ファイル calles テストがあり、lexer で定義されている 2 つのコマンドが含まれていることです。
しかし、インタープリターは行print a
のみを実行します! 問題は主にパーサーにあり、再帰する必要があることはわかっています。このように修正しました(以下のコード)が、それでも機能しません。
編集
これは私のレクサーです。エラーを見つけるために、できるだけ単純化しようとしました。
Main.ml