Ошибка CallFailed при разборе - PullRequest
0 голосов
/ 17 мая 2018

Я стажер, пытаюсь написать свой первый синтаксис с использованием Rascal.
Во время программирования я столкнулся с ошибкой, которую мой преподаватель, Ример ван Розен, никогда раньше не видел. В настоящий момент я все еще пытаюсь выяснить, является ли проблема моим кодом или ошибкой Rascal, но я чувствовал, что должен сообщить об ошибке здесь.

Синтаксис, используемый для обычного синтаксического анализа, и даже после того, как код был возвращен в прежнее состояние до добавления нового материала, он все равно выдает ту же ошибку.

Мой файл синтаксиса

module Syntax

lexical Natural = [0-9]+ !>> [0-9] ;
lexical ID = [a-zA-Z][a-z0-9A-Z]* !>> [a-z0-9A-Z];
lexical String = "\"" ![\"]* "\"";
lexical Sym = [a-zA-Z.!@#$%^&*];
lexical Mp = Sym*;

layout WhiteSpace = [\t-\n \r]* ;

start syntax CreatorData
    = title: "title " ID title
    | author: "author " ID author
    | homepage: "homepage " ID homepage;

Parser

module Parser

import Syntax;
import AST;
import ParseTree;

public CreatorData load(str txt) = parse(#CreatorData, txt);

Ошибка

The Error

Я надеюсь, что кто-нибудь скажет мне, где я ломаю свою программу или что я указал на неизвестную ошибку Rascal.

1 Ответ

0 голосов
/ 17 мая 2018

Ошибка вызова означает, что вызов parse не выполнен, поскольку предоставленные вами аргументы не соответствуют ни одной из возможных перегрузок синтаксического анализа.

Для вашего кода, похоже, у вас также есть ADT с именем CreatorData. Это совпадает с определением синтаксиса CreatorData. В учебнике задокументирована схема, как обойти эту проблему .

Не уверен насчет вашего случая, но часто вы можете пропустить форму ADT и просто поработать над конкретными деревьями, но это может быть чем-то, что можно изучить в будущем.

...