모듈:몰 질량

Module

간단한 화학식에서 몰 질량을 계산합니다. H2O, NH3, CuSO4, Si(OH)4, 2H2O와 같은 -- 현지의 c = {} 모듈의 테이블   현지의  = { 원자 질량 표(.svg에서 추출)  H=1.00794; =4.002602;  =6.941; 있다=9.012182; B=10.811; C=12.0107; N=14.00674; O=15.9994; F=18.9984032; =20.1797;  =22.98976928; Mg=24.3050; =26.9815386; =28.0855; P=30.973762; S=32.066; =35.4527; 아르=39.948;  K=39.0983; Ca=40.078; 문장 부호=44.955912; =47.867; V=50.9415; 크르=51.9961; Mn=54.938045; =55.845; =58.933195; =58.6934; CU=63.546; Zn=65.39; =69.723; =72.61; ~하듯이=74.92160; =78.96; 브르=79.904; 크르=83.80;  Rb=85.4678; Sr=87.62; Y=88.90585; Zr=91.224; Nb=92.90638; =95.94; Tc=97.9072; =101.07; Rh=102.90550; PD=106.42; 아그=107.8682; Cd=112.411; =114.818; Sn=118.710; 누군가=121.760; =127.60; I=126.90447; =131.29;  Cs=132.9054519; =137.327; Hf=178.49; =180.94788; W=183.84; =186.207; 오스=190.23; =192.217; Pt=195.084; 아우=196.966569; Hg=200.59; =204.3833; PB=207.2; =208.98040; =208.9824; 에서=209.9871; Rn=222.0176;   =138.90547; Ce=140.116; 프루=140.90765; Nd=144.242; PM=144.9127; SM=150.36; 에우=151.964; Gd=157.25; TB=158.92535; 다이=162.500; =164.93032; 음.정말=167.259; Tm=168.93421; Yb=173.04; =174.967;  Fr=223.0197; =226.0254; Rf=263.1125; DB=262.1144; Sg=266.1219; Bh=264.1247; Hs=269.1341; Mt=268.1388; Ds=272.1463; Rg=272.1535; Cn=277.0; =284.0; FL=289.0; =288.0; Lv=292.0; Ts=292.0; 오그=294.0;   아크=227.0277; Th=232.03806; =231.03588; U=238.02891; Np=237.0482; =244.0642; =243.0614; cm=247.0703; BK=247.0703; Cf=251.0796; =252.0830; Fm=257.0951; Md=258.0984; 아니요.=259.1011; Lr=262.110; }   현지의 T_ELEM   = 0 토큰 유형 현지의 T_Num    = 1 현지의 T_O      = 2 '()'를 엽니다. 현지의 T_C      = 3 닫힘 '" 현지의 T_MIDDOT = 4 수화 구분 기호 현지의 T_SPACE  = 5 여백 현지의 T_WATER  = 6 결정화수 '•xH2O'   기능. 항목(f) (반복기) 공식 'f'에서 토큰(유형, 값)을 한 번에 하나씩 반환합니다.  현지의 i = 1  돌아가다 기능. ()   현지의 t, x = 영의, 영의   한다면 i <= f:() 그리고나서    x = f:경기('^%u%l*', i); t = T_ELEM;  일치하는 요소(C, O, Ba, Na, ...)    한다면 것은 아니다. x 그리고나서 x = f:경기('^[%d.]+', i); t = T_Num; 끝. 일치하는 번호    한다면 것은 아니다. x 그리고나서 x = f:경기('^%(', i); t = T_O; 끝.    일치 '(')    한다면 것은 아니다. x 그리고나서 x = f:경기('^%)', i); t = T_C; 끝.    일치 '")                  한다면 것은 아니다. x 그리고나서 x = f:경기('^•[%d.]*H2O', i); t = T_WATER; 끝. 일치하는 '•xH2O' x 숫자, 선택 사항    한다면 것은 아니다. x 그리고나서 x = f:경기('^•', i); t = T_MIDDOT; 끝.    일치하는 '•'    한다면 것은 아니다. x 그리고나서 x = f:경기('^%s+', i); t = T_SPACE; 끝.    일치하는 공백    한다면 x 그리고나서 i = i + x:(); 또 다른 오류("'로 시작하는 수식에 잘못된 문자가 있습니다."..f:후보선수(i).."'") 끝.   끝.   돌아가다 t, x  끝. 끝.  기능. c.음.() 공식 'f'의 몰 질량  현지의 f = .논병아리[1]  현지의 ,  = {0}, {0}  '()'을(를) 처리할 스택; 'cur'가 곱셈될 때까지(또는 그렇지 않을 때까지) 기다립니다.  현지의 t, x  위해서 t, x  항목(f) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다    한다면 t == T_ELEM 그리고나서 주장하다([x], "알 수 없는 요소: "..x)   [#] = [#] + [#]; [#] = [x]   그렇지 않으면 t == T_Num  그리고나서 [#] = [#] + [#] * 수에 달하여(x); [#] = 0   그렇지 않으면 t == T_O    그리고나서 [#] = [#] + [#]; [#] = 0;[#+1] = 0; [#+1] = 0 밀다   그렇지 않으면 t == T_C    그리고나서 한다면 # < 2 그리고나서 오류("너무 많아요."..f) 끝.    [#] = [#] + [#]; [#-1] = [#]; [#], [#] = 영의, 영의    그렇지 않으면 t == T_WATER 그리고나서     한다면 string.match(x, '•%d+') 그리고나서     [#] = [#] + ((2*.H + .O) * 수에 달하여(string.match(x, '[%d.]+')))    또 다른     sum[#sum] = sum[#sum] + (2*am).H + am.O)    끝.   그렇지 않으면 t == T_MIDDOT 그리고나서 오류("수화 구문(•)이 아직 지원되지 않음")   그렇지 않으면 t ~= T_SPACE 그리고나서 오류('???') 끝. 공백을 무시  끝.  한다면 # > 1 그리고나서 오류("(')'이 너무 많음"..f) 끝.   선행 번호 확인(2XyZ)  한다면 string.match(f, '^[%d.]+') 그리고나서    돌아가다 ([1] + [1]) * 수에 달하여(string.match(f, '^[%d.]+'))  또 다른   돌아가다 [1] + [1]  끝. 끝.   --[테스트 ------------------- c.frame = {} c.frame.args = {}   함수 pm(f) c.frame.args[1] = f print('..f..'의 몰 질량은 '..c.mm (c.frame)) 끝.   pm("NaCl") pm("NaOH") pm("CaCO3") pm("H2SO4") pm("C10H8") pm("CO2") pm("Mo") pm("HCl") pm("Si(OH)4") pm("CuSO4(H20)5") --------------- --]]   돌아가다 c 내보내기 c.mm 내보내기