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 ;