ਬੀਨ ਮਸ਼ੀਨ ਰੀਟਰੋਸਪੈਕਟਿਵ, ਭਾਗ 7
ਅਸੀਂ ਇੱਕ ਆਮ-ਉਦੇਸ਼ ਵਾਲੀ ਲਾਈਨ-ਆਫ-ਬਿਜ਼ਨਸ ਓਓ ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾ ਜਿਵੇਂ ਕਿ ਪਾਈਥਨ, ਸੀ#, ਜਾਵਾ, ਆਦਿ ਵਿੱਚ ਇੱਕ ਕੰਪਾਈਲਰ ਕਿਵੇਂ ਲਿਖ ਸਕਦੇ ਹਾਂ? ਕੰਪਾਈਲਰ ਪ੍ਰੋਗਰਾਮ ਹਨ, ਇਸਲਈ ਅਸੀਂ ਸਵਾਲ ਨੂੰ ਹੋਰ ਆਮ ਬਣਾ ਸਕਦੇ ਹਾਂ: ਅਸੀਂ ਕਿਵੇਂ ਲਿਖਦੇ ਹਾਂ ਪ੍ਰੋਗਰਾਮ?
ਲਗਭਗ ਹਰ ਵਿਆਪਕ ਤੌਰ ‘ਤੇ ਵਰਤੀ ਜਾਣ ਵਾਲੀ ਪ੍ਰੋਗ੍ਰਾਮਿੰਗ ਭਾਸ਼ਾ ਲਈ ਆਮ ਮੂਲ ਵਿਚਾਰ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਹੈ ਰਚਨਾ:
- ਸਮੱਸਿਆ ਨੂੰ ਕਈ ਉਪ-ਸਮੱਸਿਆਵਾਂ ਵਿੱਚ ਵੰਡੋ
- ਫੰਕਸ਼ਨ ਲਿਖੋ ਜੋ ਹਰੇਕ ਇੱਕ ਜਾਂ ਇੱਕ ਤੋਂ ਵੱਧ ਉਪ-ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕਰਦੇ ਹਨ
- ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਲਿਖ ਕੇ ਇੱਕ ਹੱਲ ਤਿਆਰ ਕਰੋ ਜੋ ਹੋਰ ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਕਾਲ ਕਰਦੇ ਹਨ
ਇਹਨਾਂ ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਕਿਵੇਂ ਸੰਗਠਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਇਸ ਦਾ ਵੇਰਵਾ ਭਾਸ਼ਾ ਤੋਂ ਭਾਸ਼ਾ ਤੱਕ ਵੱਖਰਾ ਹੁੰਦਾ ਹੈ; ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਹੋਰ ਫੰਕਸ਼ਨਾਂ ਵਿੱਚ, ਜਾਂ ਕਲਾਸਾਂ ਵਿੱਚ, ਜਾਂ ਮੋਡੀਊਲਾਂ ਵਿੱਚ, ਜਾਂ ਜੋ ਵੀ ਸਟੋਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਪਰ ਅੰਤ ਵਿੱਚ, ਜ਼ਿਆਦਾਤਰ ਪ੍ਰੋਗਰਾਮਾਂ ਨੂੰ ਫੰਕਸ਼ਨਾਂ ਦੀ ਰਚਨਾ ਵਜੋਂ ਦੇਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।
ਹੁਣ, ਅਸੀਂ ਬਸ ਨਹੀਂ ਕਾਲ ਕਰੋ ਦੇ ਕਾਰਜ. ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾਵਾਂ ਵੀ ਹਨ ਕੰਟਰੋਲ ਵਹਾਅਜਿਸ ਨਾਲ ਉਹ ਬਣਾਉਂਦੇ ਹਨ ਫੈਸਲੇ ਕਿਸ ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਕਾਲ ਕਰਨਾ ਹੈ ਬਾਰੇ:
- foo() ਨੂੰ ਕਾਲ ਕਰੋ ਜੇਕਰ ਅਤੇ ਕੇਵਲ ਜੇਕਰ ਕੁਝ ਭਵਿੱਖਬਾਣੀ ਸੱਚ ਹੈ.
- foo() ਨੂੰ ਵਾਰ-ਵਾਰ ਕਾਲ ਕਰੋ ਜਦੋਂ ਤੱਕ ਕਿ ਕੁਝ ਅਨੁਮਾਨ ਗਲਤ ਨਹੀਂ ਹੁੰਦਾ।
- foo() ਨੂੰ ਕਾਲ ਕਰੋ ਪਰ ਜੇਕਰ ਇਹ ਫੇਲ ਹੁੰਦਾ ਹੈ ਤਾਂ ਇਸ ਕੈਚ ਬਲਾਕ ਦੀ ਬ੍ਰਾਂਚ ਕਰੋ
- … ਇਤਆਦਿ
ਅਸੀਂ ਆਮ ਤੌਰ ‘ਤੇ ਨਹੀਂ ਸੋਚਦੇ ਕੰਟਰੋਲ ਵਹਾਅ ਦੀ ਇੱਕ ਕਿਸਮ ਦੇ ਤੌਰ ਤੇ ਫੰਕਸ਼ਨ ਰਚਨਾ. ਕੀ ਹੋਇਆ ਜੇ ਅਸੀਂ ਕੀਤਾ? ਅਸੀਂ ਕੰਬੀਨੇਟਰਜ਼ ਵਿੱਚ ਨਿਯੰਤਰਣ ਪ੍ਰਵਾਹ ਨੂੰ ਐਕਸਟਰੈਕਟ ਕਰਨ ਲਈ ਸੰਯੋਜਕ ਤਰਕ ਅਤੇ ਕਾਰਜਸ਼ੀਲ ਪ੍ਰੋਗਰਾਮਿੰਗ ਦੁਆਰਾ ਪ੍ਰੇਰਿਤ ਵਿਚਾਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹਾਂ ਅਤੇ ਫਿਰ ਕੰਪਾਈਲਰ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਵਰਕਫਲੋ ਨੂੰ ਸੰਖੇਪ ਰੂਪ ਵਿੱਚ ਬਣਾਉਣ ਲਈ ਉਹਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹਾਂ।
ਇੱਕ “ਪਾਰਸ ਟ੍ਰੀ” ਜਾਂ ਐਬਸਟ੍ਰੈਕਟ ਸਿੰਟੈਕਸ ਟ੍ਰੀ (ਇਸ ਤੋਂ ਬਾਅਦ AST) ਇੱਕ ਡੇਟਾ ਢਾਂਚਾ ਹੈ ਜੋ ਇੱਕ ਪ੍ਰੋਗਰਾਮ ਦੇ ਸੰਟੈਕਟਿਕ ਵਿਸ਼ਲੇਸ਼ਣ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ। ਇਸ ਲੜੀ ਦੇ ਅਗਲੇ ਕੁਝ ਐਪੀਸੋਡਾਂ ਵਿੱਚ ਅਸੀਂ ਇਸ ਸਵਾਲ ਦੀ ਪੜਚੋਲ ਕਰਾਂਗੇ ਕਿ ਇੱਕ ਕੰਪਾਈਲਰ ਲੇਖਕ ਕੰਪਾਈਲਰ ਡਿਜ਼ਾਈਨ ਵਿੱਚ ਇੱਕ ਆਮ ਉਪ-ਸਮੱਸਿਆ ਨੂੰ ਕਿਵੇਂ ਹੱਲ ਕਰ ਸਕਦਾ ਹੈ: ਅਸੀਂ ਇੱਕ ਕਿਵੇਂ ਲਿਖ ਸਕਦੇ ਹਾਂ AST→ AST ਸੰਯੁਕਤ ਤਰਕ ਦੁਆਰਾ ਪ੍ਰੇਰਿਤ ਇੱਕ ਪਹੁੰਚ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਫੰਕਸ਼ਨ?
ਕਿਉਂਕਿ ਬੀਨ ਮਸ਼ੀਨ ਅਤੇ ਇਸਦਾ ਕੰਪਾਈਲਰ ਦੋਵੇਂ ਪਾਈਥਨ ਵਿੱਚ ਲਿਖੇ ਗਏ ਹਨ, ਅਸੀਂ ਪਾਈਥਨ ਦੁਆਰਾ ਪਹਿਲਾਂ ਹੀ ਪ੍ਰਦਾਨ ਕੀਤੇ ਗਏ ਬਹੁਤ ਹੀ ਸੁਵਿਧਾਜਨਕ ਪਾਰਸ ਟ੍ਰੀ ਕਿਸਮਾਂ ਦੀ ਵਰਤੋਂ ਕਰਾਂਗੇ। ast ਮੋਡੀਊਲ. ਇਹ ਬਹੁਤ ਸਿੱਧਾ ਹੈ. ਹਰ ਨੋਡ ਰੁੱਖ ਵਿੱਚ ਇੱਕ ਕਿਸਮ ਅਤੇ ਜ਼ੀਰੋ ਜਾਂ ਵੱਧ ਲੇਬਲ ਕੀਤਾ ਗਿਆ ਹੈ ਬੱਚੇ. ਲੇਬਲ ‘ਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹੋਏ, ਬੱਚਾ ਇੱਕ ਮੁੱਲ ਹੋ ਸਕਦਾ ਹੈ ਜਿਵੇਂ ਕਿ ਇੱਕ ਸਤਰ ਜਾਂ ਨੰਬਰ, ਜਾਂ ਇੱਕ ਨੋਡ।
ਉਦਾਹਰਨ ਲਈ, ਜੇਕਰ ਸਾਡੇ ਕੋਲ ਇੱਕ ਸਟੇਟਮੈਂਟ “x = 2 + 3” ਹੈ ਤਾਂ ਅਸਾਈਨਮੈਂਟ ਦੇ ਸੱਜੇ ਪਾਸੇ ਲਈ AST ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਬਣਾਇਆ ਜਾ ਸਕਦਾ ਹੈ (ਇਹ ਮੰਨ ਕੇ ਕਿ ast ਮੋਡੀਊਲ ਦੇ ਸਾਰੇ ਮੈਂਬਰਾਂ ਨੂੰ ਦਾਇਰੇ ਵਿੱਚ ਲਿਆਂਦਾ ਗਿਆ ਹੈ।)
BinOp(
left=Num(n=2),
op=Add(),
right=Num(n=3))
ਸਮੀਕਰਨ ਦਾ AST ਇੱਕ ਬਾਈਨਰੀ ਆਪਰੇਟਰ ਹੈ; ਇਸਦੇ ਤਿੰਨ ਬੱਚੇ ਹਨ, left, right ਅਤੇ op. ਦ left ਅਤੇ right ਸ਼ਾਬਦਿਕ ਨੰਬਰ ਹਨ; ਉਹਨਾਂ ਦਾ ਬੱਚਾ n ਉਸ ਨੰਬਰ ਦਾ ਮੁੱਲ ਹੈ। ਤੁਸੀਂ ਇਹ ਵਿਚਾਰ ਪ੍ਰਾਪਤ ਕਰੋ ਕਿ ਮੈਨੂੰ ਯਕੀਨ ਹੈ.
ਹਰੇਕ ਪਾਈਥਨ ਸਮੀਕਰਨ, ਸਟੇਟਮੈਂਟ, ਆਦਿ ਦਾ ਇੱਕ AST ਨੋਡ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਪਾਰਸਰ ਅਤੇ ਅਨਪਾਰਸਰ ਦੋਵਾਂ ਦੇ ਮਿਆਰੀ ਅਮਲ ਹਨ; ਤੁਸੀਂ ਟੈਕਸਟ ਨੂੰ AST ਵਿੱਚ ਬਦਲ ਸਕਦੇ ਹੋ, AST ਨੂੰ ਟੈਕਸਟ ਵਿੱਚ ਵਾਪਸ ਕਰ ਸਕਦੇ ਹੋ, ਅਤੇ ਉਸ ਪ੍ਰੋਗਰਾਮ ਨੂੰ ਕੰਪਾਇਲ ਅਤੇ ਚਲਾ ਸਕਦੇ ਹੋ।
ਅਗਲੀ ਵਾਰ FAIC ‘ਤੇ: ਮੈਂ ਪੈਟਰਨਾਂ/ਨਿਯਮਾਂ/ਕੰਬੀਨੇਟਰ ਸਿਸਟਮ ਦਾ ਸੰਖੇਪ ਵਰਣਨ ਕਰਾਂਗਾ, ਅਤੇ ਫਿਰ ਇਸ ਬਾਰੇ ਕੁਝ ਵਿਚਾਰ ਦੇਵਾਂਗਾ ਕਿ ਇਸ ਪਹੁੰਚ ਨੂੰ ਇੱਕ ਹੋਰ ਰਵਾਇਤੀ ਕੰਪਾਈਲਰ ਤਕਨੀਕ ਜਿਵੇਂ ਕਿ ਰੀਰਾਈਟਸ ਲਈ ਵਿਜ਼ਟਰ ਪੈਟਰਨ ਲਈ ਪ੍ਰੇਰਿਤ ਕੀਤਾ ਹੈ। ਫਿਰ ਅਸੀਂ ਪੈਟਰਨਾਂ ਅਤੇ ਅਨੁਮਾਨਾਂ ਦੀਆਂ ਉਦਾਹਰਣਾਂ ਨੂੰ ਦੇਖਣਾ ਸ਼ੁਰੂ ਕਰਾਂਗੇ।
