доступ к части согласованной строки ocamllex

Вопрос:

Я пытаюсь организовать ocamllex и ocamlyacc код для сканирования и анализа простого языка. Я определил абстрактный синтаксис для того же самого, но нахожу трудность сканирования сложных правил. Здесь мой код

    {
type exp = B of bool | Const of float | Iszero of exp | Diff of exp*exp |
If of exp * exp * exp
}

rule scanparse = parse
|"true"| "false" as boolean {B boolean}
|['0'-'9']+ "." ['0'-'9']* as num {Const num}
|"iszero" space+ ['a'-'z']+ {??}
|'-' space+ '(' space* ['a'-'z']+ space* ',' space* ['a'-'z']+ space* ')' {??}

Но я не могу получить доступ к некоторым частям согласованной строки. Поскольку объявление выражения является рекурсивным, вложенные функции не помогают (?). Пожалуйста помоги.

Лучший ответ:

Чтобы подробно остановиться на моем комментарии выше, мне кажется, что вы пытаетесь использовать ocamllex для выполнения того, что требуется ocamlyacc. Я думаю, вам нужно определить очень простые токены в ocamllex (например, логические значения, числа и имена переменных), затем используйте ocamlyacc, чтобы определить, как они идут вместе, чтобы создавать такие вещи, как Iszero, Diff и If. ocamllex недостаточно эффективен для анализа структур, определенных вашим абстрактным синтаксисом.

Обновить

Вот учебник ocamlyacc, который я нашел связанным с OCaml.org, который является довольно хорошим одобрением: учебник OCamlYacc. Я просмотрел его, и это выглядит хорошо. (Когда я начал использовать ocamlyacc, я уже знал yacc, поэтому я смог быстро уйти).

Оцените статью
TechArks.Ru
Добавить комментарий