summaryrefslogtreecommitdiffstats
path: root/otherlibs/labltk/compiler/parser.mly
diff options
context:
space:
mode:
authorJacques Garrigue <garrigue at math.nagoya-u.ac.jp>1999-11-16 10:29:03 +0000
committerJacques Garrigue <garrigue at math.nagoya-u.ac.jp>1999-11-16 10:29:03 +0000
commit27c082c04663ff18459777e111aca4cde20df265 (patch)
treed74a2991f4712aa20929a763bb65997c16da94ff /otherlibs/labltk/compiler/parser.mly
parent8f492b2886fb03a3c23f0d2581222445285d6d28 (diff)
leave labltk only in olabl branch
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@2536 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'otherlibs/labltk/compiler/parser.mly')
-rw-r--r--otherlibs/labltk/compiler/parser.mly312
1 files changed, 0 insertions, 312 deletions
diff --git a/otherlibs/labltk/compiler/parser.mly b/otherlibs/labltk/compiler/parser.mly
deleted file mode 100644
index 4920c5c62..000000000
--- a/otherlibs/labltk/compiler/parser.mly
+++ /dev/null
@@ -1,312 +0,0 @@
-/* $Id$ */
-
-%{
-
-open Tables
-
-let lowercase s =
- let r = String.create len:(String.length s) in
- String.blit s pos:0 to:r to_pos:0 len:(String.length s);
- let c = s.[0] in
- if c >= 'A' & c <= 'Z' then r.[0] <- Char.chr(Char.code c + 32);
- r
-
-%}
-
-/* Tokens */
-%token <string> IDENT
-%token <string> STRING
-%token EOF
-
-%token LPAREN /* "(" */
-%token RPAREN /* ")" */
-%token COMMA /* "," */
-%token SEMICOLON /* ";" */
-%token COLON /* ":" */
-%token QUESTION /* "?" */
-%token LBRACKET /* "[" */
-%token RBRACKET /* "]" */
-%token LBRACE /* "{" */
-%token RBRACE /* "}" */
-
-%token TYINT /* "int" */
-%token TYFLOAT /* "float" */
-%token TYBOOL /* "bool" */
-%token TYCHAR /* "char" */
-%token TYSTRING /* "string" */
-%token LIST /* "list" */
-
-%token AS /* "as" */
-%token VARIANT /* "variant" */
-%token WIDGET /* "widget" */
-%token OPTION /* "option" */
-%token TYPE /* "type" */
-%token SEQUENCE /* "sequence" */
-%token SUBTYPE /* "subtype" */
-%token FUNCTION /* "function" */
-%token MODULE /* "module" */
-%token EXTERNAL /* "external" */
-%token UNSAFE /* "unsafe" */
-/* Entry points */
-%start entry
-%type <unit> entry
-
-%%
-TypeName:
- IDENT { lowercase $1 }
- | WIDGET { "widget" }
-;
-
-/* Atomic types */
-Type0 :
- TYINT
- { Int }
- | TYFLOAT
- { Float }
- | TYBOOL
- { Bool }
- | TYCHAR
- { Char }
- | TYSTRING
- { String }
- | TypeName
- { UserDefined $1 }
-;
-
-/* with subtypes */
-Type1 :
- Type0
- { $1 }
- | TypeName LPAREN IDENT RPAREN
- { Subtype ($1, $3) }
- | WIDGET LPAREN IDENT RPAREN
- { Subtype ("widget", $3) }
- | OPTION LPAREN IDENT RPAREN
- { Subtype ("options", $3) }
- | Type1 AS STRING
- { As ($1, $3) }
-;
-
-/* with list constructors */
-Type2 :
- Type1
- { $1 }
- | Type1 LIST
- { List $1 }
-;
-
-Labeled_type2 :
- Type2
- { "",$1 }
- | IDENT COLON Type2
- { $1, $3 }
-;
-
-/* products */
-Type_list :
- Type2 COMMA Type_list
- { $1 :: $3 }
- | Type2
- { [$1] }
-;
-
-/* records */
-Type_record :
- Labeled_type2 COMMA Type_record
- { $1 :: $3 }
- | Labeled_type2
- { [$1] }
-;
-
-/* callback arguments or function results*/
-FType :
- LPAREN RPAREN
- { Unit }
- | LPAREN Type2 RPAREN
- { $2 }
- | LPAREN Type_record RPAREN
- { Record $2 }
-;
-
-Type :
- Type2
- { $1 }
- | FUNCTION FType
- { Function $2 }
-;
-
-
-
-SimpleArg:
- STRING
- {StringArg $1}
- | Type
- {TypeArg ("",$1) }
-;
-
-Arg:
- STRING
- {StringArg $1}
- | Type
- {TypeArg ("",$1) }
- | IDENT COLON Type
- {TypeArg ($1,$3)}
- | QUESTION IDENT COLON LBRACKET SimpleArgList RBRACKET DefaultList
- {OptionalArgs ( $2, $5, $7 )}
- | QUESTION WIDGET COLON LBRACKET SimpleArgList RBRACKET DefaultList
- {OptionalArgs ( "widget", $5, $7 )}
- | QUESTION IDENT COLON LBRACKET SimpleArgList RBRACKET
- {OptionalArgs ( $2, $5, [] )}
- | QUESTION WIDGET COLON LBRACKET SimpleArgList RBRACKET
- {OptionalArgs ( "widget", $5, [] )}
- | WIDGET COLON Type
- {TypeArg ("widget",$3)}
- | Template
- { $1 }
-;
-
-SimpleArgList:
- SimpleArg SEMICOLON SimpleArgList
- { $1 :: $3}
- | SimpleArg
- { [$1] }
-;
-
-ArgList:
- Arg SEMICOLON ArgList
- { $1 :: $3}
- | Arg
- { [$1] }
-;
-
-/* DefaultList Only one TypeArg in ArgList and it must be unlabeled */
-DefaultList :
- LBRACKET LBRACE ArgList RBRACE RBRACKET
- {$3}
-
-/* Template */
-Template :
- LBRACKET ArgList RBRACKET
- { ListArg $2 }
-;
-
-
-/* Constructors for type declarations */
-Constructor :
- IDENT Template
- {{ component = Constructor;
- ml_name = $1;
- var_name = getvarname $1 $2;
- template = $2;
- result = Unit;
- safe = true }}
- | IDENT LPAREN IDENT RPAREN Template
- {{ component = Constructor;
- ml_name = $1;
- var_name = $3;
- template = $5;
- result = Unit;
- safe = true }}
-;
-
-AbbrevConstructor :
- Constructor
- { Full $1 }
- | IDENT
- { Abbrev $1 }
-;
-
-Constructors :
- Constructor Constructors
- { $1 :: $2 }
-| Constructor
- { [$1] }
-;
-
-AbbrevConstructors :
- AbbrevConstructor AbbrevConstructors
- { $1 :: $2 }
-| AbbrevConstructor
- { [$1] }
-;
-
-Safe:
- /* */
- { true }
- | UNSAFE
- { false }
-
-Command :
- Safe FUNCTION FType IDENT Template
- {{component = Command; ml_name = $4; var_name = "";
- template = $5; result = $3; safe = $1 }}
-;
-
-External :
- Safe EXTERNAL IDENT STRING
- {{component = External; ml_name = $3; var_name = "";
- template = StringArg $4; result = Unit; safe = $1}}
-;
-
-Option :
- OPTION IDENT Template
- {{component = Constructor; ml_name = $2; var_name = getvarname $2 $3;
- template = $3; result = Unit; safe = true }}
- /* Abbreviated */
-| OPTION IDENT LPAREN IDENT RPAREN Template
- {{component = Constructor; ml_name = $2; var_name = $4;
- template = $6; result = Unit; safe = true }}
- /* Abbreviated */
-| OPTION IDENT
- { retrieve_option $2 }
-;
-
-WidgetComponents :
- /* */
- { [] }
- | Command WidgetComponents
- { $1 :: $2 }
- | Option WidgetComponents
- { $1 :: $2 }
- | External WidgetComponents
- { $1 :: $2 }
-;
-
-ModuleComponents :
- /* */
- { [] }
- | Command ModuleComponents
- { $1 :: $2 }
- | External ModuleComponents
- { $1 :: $2 }
-;
-
-ParserArity :
- /* */
- { OneToken }
- | SEQUENCE
- { MultipleToken }
-;
-
-
-
-entry :
- TYPE ParserArity TypeName LBRACE Constructors RBRACE
- { enter_type $3 $2 $5 }
-| VARIANT TYPE ParserArity TypeName LBRACE Constructors RBRACE
- { enter_type $4 $3 $6 variant: true }
-| TYPE ParserArity TypeName EXTERNAL
- { enter_external_type $3 $2 }
-| SUBTYPE ParserArity OPTION LPAREN IDENT RPAREN LBRACE AbbrevConstructors RBRACE
- { enter_subtype "options" $2 $5 $8 }
-| SUBTYPE ParserArity TypeName LPAREN IDENT RPAREN LBRACE AbbrevConstructors RBRACE
- { enter_subtype $3 $2 $5 $8 }
-| Command
- { enter_function $1 }
-| WIDGET IDENT LBRACE WidgetComponents RBRACE
- { enter_widget $2 $4 }
-| MODULE IDENT LBRACE ModuleComponents RBRACE
- { enter_module (lowercase $2) $4 }
-| EOF
- { raise End_of_file }
-;