доступ к части согласованной строки 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* ')' {??}

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


person user2352241    schedule 05.07.2013    source источник
comment
Я не вижу здесь кода ocamlyacc. Это просто лексический код, который не обрабатывает ничего вложенного. Для чего это стоит. Но на самом деле я не понимаю вашего вопроса.   -  person Jeffrey Scofield    schedule 05.07.2013


Ответы (1)


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

Обновить

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

person Jeffrey Scofield    schedule 05.07.2013
comment
Спасибо, это ответ на мой вопрос. Пожалуйста, будьте так любезны, чтобы упомянуть также хороший учебник по ocamlyacc. Еще раз спасибо! - person user2352241; 05.07.2013