Paste number 75496: test case for "Error: Unable to find class mapping for {{ succb }}"

Index of paste annotations: 2 | 1

Paste number 75496: test case for "Error: Unable to find class mapping for {{ succb }}"
Pasted by: hannes
When:3 years, 2 months ago
Share:Tweet this! | http://paste.lisp.org/+1M94
Channel:#dylan
Paste contents:
Raw Source | XML | Display As
define open class <token> (<object>)
end;

define constant <positionable-stream> = <object>;
define constant <parse-failure> = <object>;
define constant <parse-context> = <object>;

define function seq1 (#rest sub-rules) => (rule-parser :: <function>)
  local method foo (stream, context)
          values(if (context) #t end, #f, #t);
        end;
  foo;
end;

define constant program-parser-rule = seq1 (parse-ablock);


define function parse-program
 (stream :: <positionable-stream>, context :: <parse-context>)
 => (value :: false-or (<ablock-token>),
     success? :: <boolean>,
     failure :: false-or (<parse-failure>))
  let (prod, succb :: <boolean>, err :: false-or (<parse-failure>))
    = program-parser-rule (stream, context);
  succb := #f;
  values (succb, succb, err);
end function;

define class <ablock-token> (<token>) end class;

define constant ablock-parser-rule = seq1 (parse-procedure-block);

define function parse-ablock
 (stream :: <positionable-stream>, context :: <parse-context>)
 => (value :: false-or (<ablock-token>),
     success? :: <boolean>,
     failure :: false-or (<parse-failure>))
  let (prod, succb :: <boolean>, err :: false-or(<parse-failure>))
    = ablock-parser-rule (stream, context);
  succb := #f;
  values(succb, succb, err);
end function;

define class <procedure-block-token> (<token>) end class;

define constant procedure-block-parser-rule = seq1 ( parse-ablock);
define function parse-procedure-block
 (stream :: <positionable-stream>, context :: <parse-context>)
 => (value :: false-or (<procedure-block-token>),
     success? :: <boolean>,
     failure :: false-or (<parse-failure>))
  let (prod, succb :: <boolean>, err :: false-or (<parse-failure>))
    = procedure-block-parser-rule (stream, context);
  succb := #f;
  values (succb, succb, err);
end function;

Annotations for this paste:

Annotation number 2: could also remove the constants
Pasted by: hannes
When:3 years, 2 months ago
Share:Tweet this! | http://paste.lisp.org/+1M94/2
Paste contents:
Raw Source | Display As
define function seq1 (#rest sub-rules) => (rule-parser :: <function>)
  local method foo (stream, context)
          values(if (context) #t end, #f, #t);
        end;
  foo;
end;

define constant program-parser-rule = seq1(parse-ablock);

define function parse-program
 (stream, context)
  program-parser-rule(stream, context);
end function;

define constant ablock-parser-rule = seq1 (parse-ablock);

define function parse-ablock
 (stream, context)
  let (prod, succb, err)
    = ablock-parser-rule (stream, context);
  succb := #f;
  values(#t, #t, #t);
end function;

Annotation number 1: could simplify it to
Pasted by: hannes
When:3 years, 2 months ago
Share:Tweet this! | http://paste.lisp.org/+1M94/1
Paste contents:
Raw Source | Display As
define constant <positionable-stream> = <object>;
define constant <parse-failure> = <object>;
define constant <parse-context> = <object>;

define function seq1 (#rest sub-rules) => (rule-parser :: <function>)
  local method foo (stream, context)
          values(if (context) #t end, #f, #t);
        end;
  foo;
end;

define constant program-parser-rule = seq1(parse-ablock);

define function parse-program
 (stream :: <positionable-stream>, context :: <parse-context>)
  program-parser-rule(stream, context);
end function;

define constant ablock-parser-rule = seq1 (parse-ablock);

define function parse-ablock
 (stream :: <positionable-stream>, context :: <parse-context>)
  let (prod, succb :: <boolean>, err :: false-or(<parse-failure>))
    = ablock-parser-rule (stream, context);
  succb := #f;
  values(#t, #t, #t);
end function;

Colorize as:
Show Line Numbers
Index of paste annotations: 2 | 1

Lisppaste pastes can be made by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively.