|
Packit |
bd2e5d |
/***********************************************************************/
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
/* described in file ../../../LICENSE. */
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
/***********************************************************************/
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
/* $Id$ */
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
%{
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
open Tables
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
%}
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
%token <string> IDENT
|
|
Packit |
bd2e5d |
%token <string> STRING
|
|
Packit |
bd2e5d |
%token EOF
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
%token LPAREN /* "(" */
|
|
Packit |
bd2e5d |
%token RPAREN /* ")" */
|
|
Packit |
bd2e5d |
%token COMMA /* "," */
|
|
Packit |
bd2e5d |
%token SEMICOLON /* ";" */
|
|
Packit |
bd2e5d |
%token COLON /* ":" */
|
|
Packit |
bd2e5d |
%token QUESTION /* "?" */
|
|
Packit |
bd2e5d |
%token LBRACKET /* "[" */
|
|
Packit |
bd2e5d |
%token RBRACKET /* "]" */
|
|
Packit |
bd2e5d |
%token LBRACE /* "{" */
|
|
Packit |
bd2e5d |
%token RBRACE /* "}" */
|
|
Packit |
bd2e5d |
%token SLASH /* "/" */
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
%token TYINT /* "int" */
|
|
Packit |
bd2e5d |
%token TYFLOAT /* "float" */
|
|
Packit |
bd2e5d |
%token TYBOOL /* "bool" */
|
|
Packit |
bd2e5d |
%token TYCHAR /* "char" */
|
|
Packit |
bd2e5d |
%token TYSTRING /* "string" */
|
|
Packit |
bd2e5d |
%token LIST /* "list" */
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
%token AS /* "as" */
|
|
Packit |
bd2e5d |
%token VARIANT /* "variant" */
|
|
Packit |
bd2e5d |
%token WIDGET /* "widget" */
|
|
Packit |
bd2e5d |
%token OPTION /* "option" */
|
|
Packit |
bd2e5d |
%token TYPE /* "type" */
|
|
Packit |
bd2e5d |
%token SEQUENCE /* "sequence" */
|
|
Packit |
bd2e5d |
%token SUBTYPE /* "subtype" */
|
|
Packit |
bd2e5d |
%token FUNCTION /* "function" */
|
|
Packit |
bd2e5d |
%token MODULE /* "module" */
|
|
Packit |
bd2e5d |
%token EXTERNAL /* "external" */
|
|
Packit |
bd2e5d |
%token UNSAFE /* "unsafe" */
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
%start entry
|
|
Packit |
bd2e5d |
%type <unit> entry
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
%%
|
|
Packit |
bd2e5d |
TypeName:
|
|
Packit |
bd2e5d |
IDENT { String.uncapitalize_ascii $1 }
|
|
Packit |
bd2e5d |
| WIDGET { "widget" }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Type0 :
|
|
Packit |
bd2e5d |
TYINT
|
|
Packit |
bd2e5d |
{ Int }
|
|
Packit |
bd2e5d |
| TYFLOAT
|
|
Packit |
bd2e5d |
{ Float }
|
|
Packit |
bd2e5d |
| TYBOOL
|
|
Packit |
bd2e5d |
{ Bool }
|
|
Packit |
bd2e5d |
| TYCHAR
|
|
Packit |
bd2e5d |
{ Char }
|
|
Packit |
bd2e5d |
| TYSTRING
|
|
Packit |
bd2e5d |
{ String }
|
|
Packit |
bd2e5d |
| TypeName
|
|
Packit |
bd2e5d |
{ UserDefined $1 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Type0_5:
|
|
Packit |
bd2e5d |
| Type0 SLASH Type0 { if !Flags.camltk then $1 else $3 }
|
|
Packit |
bd2e5d |
| Type0 { $1 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Type1 :
|
|
Packit |
bd2e5d |
Type0_5
|
|
Packit |
bd2e5d |
{ $1 }
|
|
Packit |
bd2e5d |
| TypeName LPAREN IDENT RPAREN
|
|
Packit |
bd2e5d |
{ Subtype ($1, $3) }
|
|
Packit |
bd2e5d |
| WIDGET LPAREN IDENT RPAREN
|
|
Packit |
bd2e5d |
{ Subtype ("widget", $3) }
|
|
Packit |
bd2e5d |
| OPTION LPAREN IDENT RPAREN
|
|
Packit |
bd2e5d |
{ Subtype ("options", $3) }
|
|
Packit |
bd2e5d |
| Type1 AS STRING
|
|
Packit |
bd2e5d |
{ As ($1, $3) }
|
|
Packit |
bd2e5d |
| LBRACE Type_list RBRACE
|
|
Packit |
bd2e5d |
{ Product $2 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Type2 :
|
|
Packit |
bd2e5d |
Type1
|
|
Packit |
bd2e5d |
{ $1 }
|
|
Packit |
bd2e5d |
| Type2 LIST
|
|
Packit |
bd2e5d |
{ List $1 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Labeled_type2 :
|
|
Packit |
bd2e5d |
Type2
|
|
Packit |
bd2e5d |
{ "", $1 }
|
|
Packit |
bd2e5d |
| IDENT COLON Type2
|
|
Packit |
bd2e5d |
{ $1, $3 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Type_list :
|
|
Packit |
bd2e5d |
Type2 COMMA Type_list
|
|
Packit |
bd2e5d |
{ $1 :: $3 }
|
|
Packit |
bd2e5d |
| Type2
|
|
Packit |
bd2e5d |
{ [$1] }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Type_record :
|
|
Packit |
bd2e5d |
Labeled_type2 COMMA Type_record
|
|
Packit |
bd2e5d |
{ $1 :: $3 }
|
|
Packit |
bd2e5d |
| Labeled_type2
|
|
Packit |
bd2e5d |
{ [$1] }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
/* callback arguments or function results*/
|
|
Packit |
bd2e5d |
FType :
|
|
Packit |
bd2e5d |
LPAREN RPAREN
|
|
Packit |
bd2e5d |
{ Unit }
|
|
Packit |
bd2e5d |
| LPAREN Type2 RPAREN
|
|
Packit |
bd2e5d |
{ $2 }
|
|
Packit |
bd2e5d |
| LPAREN Type_record RPAREN
|
|
Packit |
bd2e5d |
{ Record $2 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Type :
|
|
Packit |
bd2e5d |
Type2
|
|
Packit |
bd2e5d |
{ $1 }
|
|
Packit |
bd2e5d |
| FUNCTION FType
|
|
Packit |
bd2e5d |
{ Function $2 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
SimpleArg:
|
|
Packit |
bd2e5d |
STRING
|
|
Packit |
bd2e5d |
{StringArg $1}
|
|
Packit |
bd2e5d |
| Type
|
|
Packit |
bd2e5d |
{TypeArg ("", $1) }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Arg:
|
|
Packit |
bd2e5d |
STRING
|
|
Packit |
bd2e5d |
{StringArg $1}
|
|
Packit |
bd2e5d |
| Type
|
|
Packit |
bd2e5d |
{TypeArg ("", $1) }
|
|
Packit |
bd2e5d |
| IDENT COLON Type
|
|
Packit |
bd2e5d |
{TypeArg ($1, $3)}
|
|
Packit |
bd2e5d |
| QUESTION IDENT COLON LBRACKET SimpleArgList RBRACKET DefaultList
|
|
Packit |
bd2e5d |
{OptionalArgs ( $2, $5, $7 )}
|
|
Packit |
bd2e5d |
| QUESTION WIDGET COLON LBRACKET SimpleArgList RBRACKET DefaultList
|
|
Packit |
bd2e5d |
{OptionalArgs ( "widget", $5, $7 )}
|
|
Packit |
bd2e5d |
| QUESTION IDENT COLON LBRACKET SimpleArgList RBRACKET
|
|
Packit |
bd2e5d |
{OptionalArgs ( $2, $5, [] )}
|
|
Packit |
bd2e5d |
| QUESTION WIDGET COLON LBRACKET SimpleArgList RBRACKET
|
|
Packit |
bd2e5d |
{OptionalArgs ( "widget", $5, [] )}
|
|
Packit |
bd2e5d |
| WIDGET COLON Type
|
|
Packit |
bd2e5d |
{TypeArg ("widget", $3)}
|
|
Packit |
bd2e5d |
| Template
|
|
Packit |
bd2e5d |
{ $1 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
SimpleArgList:
|
|
Packit |
bd2e5d |
SimpleArg SEMICOLON SimpleArgList
|
|
Packit |
bd2e5d |
{ $1 :: $3}
|
|
Packit |
bd2e5d |
| SimpleArg
|
|
Packit |
bd2e5d |
{ [$1] }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
ArgList:
|
|
Packit |
bd2e5d |
Arg SEMICOLON ArgList
|
|
Packit |
bd2e5d |
{ $1 :: $3}
|
|
Packit |
bd2e5d |
| Arg
|
|
Packit |
bd2e5d |
{ [$1] }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
/* DefaultList Only one TypeArg in ArgList and it must be unlabeled */
|
|
Packit |
bd2e5d |
DefaultList :
|
|
Packit |
bd2e5d |
LBRACKET LBRACE ArgList RBRACE RBRACKET
|
|
Packit |
bd2e5d |
{$3}
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Template :
|
|
Packit |
bd2e5d |
LBRACKET ArgList RBRACKET
|
|
Packit |
bd2e5d |
{ ListArg $2 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
/* Constructors for type declarations */
|
|
Packit |
bd2e5d |
Constructor :
|
|
Packit |
bd2e5d |
IDENT Template
|
|
Packit |
bd2e5d |
{{ component = Constructor;
|
|
Packit |
bd2e5d |
ml_name = $1;
|
|
Packit |
bd2e5d |
var_name = getvarname $1 $2;
|
|
Packit |
bd2e5d |
template = $2;
|
|
Packit |
bd2e5d |
result = Unit;
|
|
Packit |
bd2e5d |
safe = true }}
|
|
Packit |
bd2e5d |
| IDENT LPAREN IDENT RPAREN Template
|
|
Packit |
bd2e5d |
{{ component = Constructor;
|
|
Packit |
bd2e5d |
ml_name = $1;
|
|
Packit |
bd2e5d |
var_name = $3;
|
|
Packit |
bd2e5d |
template = $5;
|
|
Packit |
bd2e5d |
result = Unit;
|
|
Packit |
bd2e5d |
safe = true }}
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
AbbrevConstructor :
|
|
Packit |
bd2e5d |
Constructor
|
|
Packit |
bd2e5d |
{ Full $1 }
|
|
Packit |
bd2e5d |
| IDENT
|
|
Packit |
bd2e5d |
{ Abbrev $1 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Constructors :
|
|
Packit |
bd2e5d |
Constructor Constructors
|
|
Packit |
bd2e5d |
{ $1 :: $2 }
|
|
Packit |
bd2e5d |
| Constructor
|
|
Packit |
bd2e5d |
{ [$1] }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
AbbrevConstructors :
|
|
Packit |
bd2e5d |
AbbrevConstructor AbbrevConstructors
|
|
Packit |
bd2e5d |
{ $1 :: $2 }
|
|
Packit |
bd2e5d |
| AbbrevConstructor
|
|
Packit |
bd2e5d |
{ [$1] }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Safe:
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
{ true }
|
|
Packit |
bd2e5d |
| UNSAFE
|
|
Packit |
bd2e5d |
{ false }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Command :
|
|
Packit |
bd2e5d |
Safe FUNCTION FType IDENT Template
|
|
Packit |
bd2e5d |
{{component = Command; ml_name = $4; var_name = "";
|
|
Packit |
bd2e5d |
template = $5; result = $3; safe = $1 }}
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
External :
|
|
Packit |
bd2e5d |
Safe EXTERNAL IDENT STRING
|
|
Packit |
bd2e5d |
{{component = External; ml_name = $3; var_name = "";
|
|
Packit |
bd2e5d |
template = StringArg $4; result = Unit; safe = $1}}
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
Option :
|
|
Packit |
bd2e5d |
OPTION IDENT Template
|
|
Packit |
bd2e5d |
{{component = Constructor; ml_name = $2; var_name = getvarname $2 $3;
|
|
Packit |
bd2e5d |
template = $3; result = Unit; safe = true }}
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
| OPTION IDENT LPAREN IDENT RPAREN Template
|
|
Packit |
bd2e5d |
{{component = Constructor; ml_name = $2; var_name = $4;
|
|
Packit |
bd2e5d |
template = $6; result = Unit; safe = true }}
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
| OPTION IDENT
|
|
Packit |
bd2e5d |
{ retrieve_option $2 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
WidgetComponents :
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
{ [] }
|
|
Packit |
bd2e5d |
| Command WidgetComponents
|
|
Packit |
bd2e5d |
{ $1 :: $2 }
|
|
Packit |
bd2e5d |
| Option WidgetComponents
|
|
Packit |
bd2e5d |
{ $1 :: $2 }
|
|
Packit |
bd2e5d |
| External WidgetComponents
|
|
Packit |
bd2e5d |
{ $1 :: $2 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
ModuleComponents :
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
{ [] }
|
|
Packit |
bd2e5d |
| Command ModuleComponents
|
|
Packit |
bd2e5d |
{ $1 :: $2 }
|
|
Packit |
bd2e5d |
| External ModuleComponents
|
|
Packit |
bd2e5d |
{ $1 :: $2 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
ParserArity :
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
{ OneToken }
|
|
Packit |
bd2e5d |
| SEQUENCE
|
|
Packit |
bd2e5d |
{ MultipleToken }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
ModuleName :
|
|
Packit |
bd2e5d |
IDENT
|
|
Packit |
bd2e5d |
{ $1 }
|
|
Packit |
bd2e5d |
| STRING
|
|
Packit |
bd2e5d |
{ $1 }
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
entry :
|
|
Packit |
bd2e5d |
TYPE ParserArity TypeName LBRACE Constructors RBRACE
|
|
Packit |
bd2e5d |
{ enter_type $3 $2 $5 }
|
|
Packit |
bd2e5d |
| VARIANT TYPE ParserArity TypeName LBRACE Constructors RBRACE
|
|
Packit |
bd2e5d |
{ enter_type $4 $3 $6 ~variant: true }
|
|
Packit |
bd2e5d |
| TYPE ParserArity TypeName EXTERNAL
|
|
Packit |
bd2e5d |
{ enter_external_type $3 $2 }
|
|
Packit |
bd2e5d |
| SUBTYPE ParserArity OPTION LPAREN ModuleName RPAREN LBRACE AbbrevConstructors RBRACE
|
|
Packit |
bd2e5d |
{ enter_subtype "options" $2 $5 $8 }
|
|
Packit |
bd2e5d |
| SUBTYPE ParserArity TypeName LPAREN IDENT RPAREN LBRACE AbbrevConstructors RBRACE
|
|
Packit |
bd2e5d |
{ enter_subtype $3 $2 $5 $8 }
|
|
Packit |
bd2e5d |
| Command
|
|
Packit |
bd2e5d |
{ enter_function $1 }
|
|
Packit |
bd2e5d |
| WIDGET ModuleName LBRACE WidgetComponents RBRACE
|
|
Packit |
bd2e5d |
{ enter_widget $2 $4 }
|
|
Packit |
bd2e5d |
| MODULE ModuleName LBRACE ModuleComponents RBRACE
|
|
Packit |
bd2e5d |
{ enter_module (String.uncapitalize_ascii $2) $4 }
|
|
Packit |
bd2e5d |
| EOF
|
|
Packit |
bd2e5d |
{ raise End_of_file }
|
|
Packit |
bd2e5d |
|