Warning, /education/kalzium/src/solver/parser.mly is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2004 Thomas Nagy <tnagy2^8@yahoo.fr>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 /* File parser.mly */
0008 
0009 
0010 
0011 %{
0012         open Chemset
0013         
0014         (*let parse_error somestring = Printf.printf "%s \n" somestring;;
0015         *)
0016 %}
0017 
0018 %token <int> INT
0019 %token PLUS MINUS
0020 %token LPAREN RPAREN LBRACKET RBRACKET
0021 %token EOF
0022 %token <string> CAPITAL
0023 %token <string> MINOR
0024 %token ARROW
0025 %start main
0026 %type <Chemset.listitems> main
0027 %%
0028 
0029 main:
0030     equation EOF { $1 }
0031 ;
0032 
0033 
0034 equation:
0035     expr ARROW expr { chem_negate $3; List.append $1 $3 }
0036 ;
0037 
0038 expr:
0039     item { $1::[] }
0040     | item PLUS expr { $1::$3 }
0041 ;
0042 
0043 item:
0044     MINOR symbols { {ikey=$1; itbl=$2; sign=1} }
0045     | INT symbols { {ikey=string_of_int($1); itbl=$2; sign=1} }
0046     | symbols { {ikey="1"; itbl=$1; sign=1}}
0047 ;
0048 
0049 symbols:
0050     qte { $1 }
0051     | qte symbols { chem_add $1 $2 }
0052 ;
0053 
0054 qte:
0055     element INT { createchem $1 $2 }
0056     | element { createchem $1 1 } 
0057     | LPAREN symbols RPAREN INT { chem_mult $2 $4 }
0058     | LBRACKET INT PLUS RBRACKET   { createchem "+" $2 }
0059     | LBRACKET INT MINUS RBRACKET  { createchem "-" $2 }
0060     | LBRACKET PLUS RBRACKET   { createchem "+" 1 }
0061     | LBRACKET MINUS RBRACKET  { createchem "-" 1 }
0062 ;
0063 
0064 element:
0065     CAPITAL MINOR { $1 ^ $2 }
0066     | CAPITAL { $1 } 
0067 ;